Linux | C ++中的分段错误-由于函数ifstream

我想我首先要说的是,我刚刚在我的电脑中安装了linux(debian),并且对在linux中做事的知识只有零。这个问题可能是由于一些非常简单的事情造成的。

代码的相关部分与此类似:

ifstream stockNames("names.txt");

while (!stockNames.eof())

{

string snline;

getline(stockNames,snline);

cout << snline << endl;

.

.

.

}

这应该打印文件“ names.txt”的第一行。而是打印一个空行。当我尝试将snline用作另一个函数的输入时,出现错误“ Segmentation

Fault”。我应该如何修改我的代码来做到这一点?在Linux中使用ifstream有什么区别吗?在Windows中导致代码正常工作


我在下面写了简单的代码

#include <string>

#include <fstream>

#include <iostream>

using namespace std;

int main(int argc, const char *argv[])

{

string dos = "names.txt";

ifstream stockNames(dos.c_str() );

string snline;

while (getline(stockNames,snline))

{

cout << snline << " ";

}

return 0;

}

names.txt的内容为

美国广播公司

DEFG

高压氧

而不是显示这些行,cout << snline不会产生任何结果


再更新一次:我又写了两个代码。

(1)

#include <string>

#include <fstream>

#include <iostream>

using namespace std;

int main(int argc, const char *argv[])

{

cout << "program has initiated" << endl;

ifstream stockNames("names.txt");

if( !stockNames )

cout << "unable to open" << endl;

string snline;

while (getline(stockNames,snline))

{

cout << snline << endl;

}

return 0;

}

结果如我所愿。首先是“程序已启动”,然后是ABC,DEFG,HBO在不同领域。但是当我改变这部分

        cout << snline << endl;

        cout << snline << " hey" << endl;

然后,不会出现ABC DEFG HBO,而是唯一的输出是“嘿”。

这太疯狂了,怎么可能呢?

顺便说一句,我尝试用ddd进行调试,当我检查变量snline时,ddd打印以下行(gdb)print snline $ 2 = {static npos =

4294967295,_M_dataplus = {> = {<__ gnu_cxx :: new_allocator> = {} ,},_M_p =

0x804c1a4“ ABC \ r”}}

回答:

您有一个dos文件,在每行末尾使用\ r \ n。Linux无法将\ r视为行尾的一部分,因此它会包含在snline字符串中。\

r导致打印的下一行内容出现在该行的开头,因此“嘿”将覆盖您期望看到的股票名称。

尝试

cout << snline << " " << endl;

你会明白我的意思

以上是 Linux | C ++中的分段错误-由于函数ifstream 的全部内容, 来源链接: utcz.com/qa/411509.html

回到顶部