C++-c++指针疑问,返回std::string 数组出错

WP主题Bug提交 WP主题Bug提交 主题:1067 回复:2226

C++-c++指针疑问,返回std::string 数组出错

泛泛之交 发布于 2017-01-08 字数 1663 浏览 1023 回复 4

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;
}

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

支持 Markdown 语法,需要帮助?

评论(4

瑾兮 2017-07-18 4 楼

你返回的string*指向的是在栈上创建的局部变量string数组,在函数返回后已经无效了。

浮生未歇 2017-06-21 3 楼

函数中创建数组时,自动申请内存空间。这些内存空间将在函数返回后是要自动释放的。
也就是说被操作系统回收了。操作系统随时都有可能把这个内存空间分配给其他变量。
如果已经被分配给其他变量,而且被重写了值,那么再次读到的值必须是未知的数据。如果有幸没有被重写,读出来的值暂时还是正确的。

偏爱自由 2017-06-13 2 楼

既然用了string,为什么不用stl的方式去除空格和回车?
string s1;
s1.erase(remove_if(s1.begin(), s1.end(),NotNeed), s1.end());
bool NotNeed(char c)
{
return iswspace(c);
}

甜柠檬 2017-04-17 1 楼

怎么可以返回函数内部创建的局部数组变量呢?建议看一下高质量c++编程,林锐写的