我遇到了一个问题,我在windows中编写这段代码,读取文件的每一行。它在Windows 7中运行良好,但在liunx中运行不佳。我真的无法弄明白。有人可以帮帮我吗?
list< list<string> > getTransRecordsFormFile(const char* fileName)
{
list< list<string> > res;
FILE* f = fopen(fileName,"r");
if(f == NULL) {
cout << "load input file failed!" << endl;
exit(0);
}
else {
char *buffer;
while(fgets(buffer,MAX_LENTH,f) != NULL) {
list<string> v = splitStr(buffer, SPLITCHAR);
res.push_back(v);
}
}
fclose(f);
return res;
}
我和我的同学们发现&#34; fgets&#34;在这段代码中是错误的,但我不知道它在windows中运行良好。
答案 0 :(得分:1)
在您的代码中,buffer
保留了酉。因此,很可能(且最有可能)指向某些无效的内存位置。访问无效内存会调用undefined behavior。一旦你的程序击中UB,绝对没有。
您必须先将buffer
指向某个有效的内存位置,然后才能在fgets()
中使用它。