字符串函数不返回字符串? c++ [关闭]

Posted

技术标签:

【中文标题】字符串函数不返回字符串? c++ [关闭]【英文标题】:string function not returning string? c++ [closed] 【发布时间】:2018-05-03 18:29:04 【问题描述】:

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

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

我被困在我的字符串函数中,它从文件中获取一个字符串,然后将其转换为一个句子。我测试了我的二进制到 ascii 转换器,它工作正常。我还测试了在我的 stringpoem_line 函数中返回一个 set string("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!

【问题讨论】:

你有什么问题? 字符串函数没有返回任何内容,或者当我尝试在 main 中打印它时似乎没有返回任何内容 请发送minimal reproducible example。 我相信你遇到了麻烦,但是Stack Overflow is a question and answer site。 “我被卡住了”不是问题。 就是这样。除了这种形式之外,它以各种方式工作。 【参考方案1】:

这一行:

string line;

创建一个空字符串。

这一行:

line[q]=p;

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

如果你知道目标大小,我建议你在创建后.resize()你的字符串,或者干脆使用+= p 给它添加字符:

line += p;

【讨论】:

“不确定为什么它不会为您崩溃” - 未定义的行为不保证会导致崩溃。它可能导致任何行为。 @JesperJuhl 对,在调试中触发调试断言【参考方案2】:

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

【讨论】:

以上是关于字符串函数不返回字符串? c++ [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

随机字符串生成函数不返回[关闭]

除非涉及 endl,否则返回字符串的 C++ 函数不起作用...?

如何在 C++ 中的类中返回对象的字符串? [关闭]

在python中返回函数名? [复制]

我可以在 C++ 中覆盖字符串返回类型函数吗

通过 C API 从字符串创建和调用 python 函数