C++-c++指针疑问,返回std::string 数组出错
A是一个字符串,而我想把它包含的回车和空格去掉。_INFO()和_WARN()就是printf()。
代码如下,图片是输出。问题是前后输出不单不完全一致,并且出现了不可思议的数据,我指针方面的知识非常模糊,不知道为何会出现这种情况。大家帮帮忙~~
图片中“空格 数据”的是getarray函数中的输出,而“数据”则是onrevcontent的输出,第二个数据很明显是错误的。
HttpTest::OnRecvContent( const char* content, _4B size )
{
std::string A(content,size);
const char *p=A.c_str();
int num=0;
std::string *data=GetArray(p,A.size(),num);
_INFO("num:%dn",num);
for(int i=0;i<num;i++)
{
_WARN("数据:%sn",(*(data+i)).c_str());
}
}
std::string *
HttpTest::GetArray(const char *p ,int size,int &len)
{
std::string data[200];
for(int i=0;i<200;i++)
data[i]="";
std::string temp;
int s=0;
_WARN("p:%sn",p);
for(int i=0;i<size;i++)
{
if(' '==p[i])
{
data[s++]=temp;
_WARN("空格t数据%sn",data[s-1].c_str());
temp="";
continue;
}
if('r'==p[i] && 'n'==p[i+1])
{
i++;
data[s++]=temp;
_WARN("空格t数据%sn",data[s-1].c_str());
temp="";
continue;
}
temp+=p[i];
}
data[s]=temp;
_WARN("空格t数据%sn",data[s].c_str());
len=s+1;
_INFO("%dn",len);
return data;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
你返回的string*指向的是在栈上创建的局部变量string数组,在函数返回后已经无效了。
函数中创建数组时,自动申请内存空间。这些内存空间将在函数返回后是要自动释放的。
也就是说被操作系统回收了。操作系统随时都有可能把这个内存空间分配给其他变量。
如果已经被分配给其他变量,而且被重写了值,那么再次读到的值必须是未知的数据。如果有幸没有被重写,读出来的值暂时还是正确的。
既然用了string,为什么不用stl的方式去除空格和回车?
string s1;
s1.erase(remove_if(s1.begin(), s1.end(),NotNeed), s1.end());
bool NotNeed(char c)
{
return iswspace(c);
}
怎么可以返回函数内部创建的局部数组变量呢?建议看一下高质量c++编程,林锐写的