【发布时间】:2012-12-04 15:40:50
【问题描述】:
我使用的是Linux & C++,下面是整个程序中唯一的输出函数。 出于某种原因,输出文件“Network_Managment_Output.txt” 没有生成,在 Windows 中使用 Visual Basic 时它可以完美运行!
我无法弄清楚为什么没有生成输出文件我没有收到任何错误。
void Data_list :: print_msg (Data_list* head) const
{
Data_list* start = head;
FILE* fp=fopen("Network_Managment_Output.txt","w");
while(start!=NULL)
{
fprintf(fp, "%s\n",start->message); //Printing messages to output file
start=start->Next;
}
fclose(fp);
}
如果我替换:fprintf(fp, "%s\n",start->message);cout<<start->message<<endl;
它完美地将数据打印到屏幕上。
有什么建议吗????
【问题讨论】:
-
您不会收到任何错误,因为您不检查错误。
-
message的类型是什么? -
如果文件无法打开,我很惊讶它允许 fprintf 没有 seg 错误。您可以将 fprintf 设为 NULL 作为空操作吗?好的,从技术上讲,它是 UB,但我预计会出现段错误。
-
请用
g++ -Wall -g编译并学习如何使用调试器gdb和内存泄漏检测器valgrind -
你也可以使用
strace和你的可执行文件来快速找出open()发生了什么——它会显示一个错误代码......