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

时间:2018-05-03 18:29:05

标签: c++ string function parsing

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

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

我遇到了我的字符串函数,该函数从文件中获取一个字符串,然后将其转换为句子。我测试了我的二进制文件到ascii转换器,它工作正常。我还测试了在我的字符串poem_line函数中返回一个设置字符串(“string line =”banana“),它也返回了它。

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

我不知道还有什么不对。

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;

}

full code

2 个答案:

答案 0 :(得分:1)

这一行:

string line;

创建一个空字符串。

这一行:

line[q]=p;

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

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

line += p;

答案 1 :(得分:0)

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