字符串函数不返回字符串? C++

string function not returning string? c++

本文关键字:字符串 C++ 函数 返回      更新时间:2023-10-16

对不起。我在这里有点新,我真的不确定在哪里发布它。但我正在制作一个数据包解析器。

该程序假设打开一个文件(二进制字符串(,然后将其转换为数字(用于IP(和字母(诗行本身(

我被困在我的字符串函数上,它从文件中获取一个字符串,然后将其转换为句子。我测试了我的二进制到 ascii 转换器,它工作正常。我还测试了在我的字符串poem_line函数中返回一个集合字符串("字符串行="香蕉"(,它也返回得很好。

我还测试了循环,它打印了需要正确更改的行的二进制字符串。

我不知道还有什么问题。

string poem_Line(int packe,int datal, char p){
int m=0;
int start_where=0;
string line;
string transformed;
start_where=packe-datal; //this is the 32+32+16+16+16
ifstream inFile_data("cases_random.in");
if(inFile_data.is_open()){
for(m=0; m<packe; m++){
inFile_data>>p;
if(m>=start_where){
int q=0;
line[q]=p;
q++;
}
}
inFile_data.close();
transformed=binaryAscii(line);
}
else
cout<<"is not open"<<endl;

return transformed;
}

完整代码!

这一行:

string line;

创建一个空字符串。

这一行:

line[q]=p;

尝试在未分配的位置写入字符串(您不拥有的内存,并且您的字符串对象不知道,因为它的托管字符串大小为 0。这是未定义的行为(

如果您知道目标大小,我建议您在创建后.resize()字符串,或者简单地使用+=p 向其添加字符:

line += p;

您的line长度等于零。做line.push_back(p);而不是line[q]=p;。push_back调整字符串大小并增加其长度。line[q]=p;- 在这种情况下,您正在写入另一个不属于line的内存,您可以通过覆盖来重写一些重要数据。