【问题标题】:Generate output file in linux C++在 linux C++ 中生成输出文件
【发布时间】: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() 发生了什么——它会显示一个错误代码......

标签: c++ linux file-io


【解决方案1】:

替换这一行:

FILE* fp=fopen("Network_Managment_Output.txt","w");

FILE* fp=fopen("Network_Managment_Output.txt","w");
if(!fp) perror("Network_Management_Output.txt");

【讨论】:

    【解决方案2】:

    您的代码或编译(配置或任何)似乎有问题,我根据您提供的代码提示制作了代码,它工作正常看看

    做类似的事情,包括这些库并保存文件 (x).cpp

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    
    struct Data_list{
       char message[250];
       Data_list *Next;
    };
    
    void print_msg (Data_list* head){
        Data_list* start = head;
    
        FILE *fp = NULL;
        fp = fopen("Network_Managment_Output.txt","w");
        if (fp != NULL){
            while(start!=NULL){
                fprintf(fp, "%s\n",start->message);                 //Printing messages to output file
                start=start->Next;
            }
            fclose(fp);
        }
    }
    
    int main(){
      Data_list* start = (struct Data_list *)malloc(sizeof(struct Data_list)) ;
      strcpy(start->message,"test 1");
      start->Next = (struct Data_list *)malloc(sizeof(struct Data_list)) ;
      strcpy(start->Next->message,"test 2");
      start->Next->Next = NULL;
      print_msg(start);
    
      return 0;
    }
    

    文件中的输出是

     test 1 
     test 2
    

    【讨论】:

    • 谢谢.. 我在程序这一行做了一些改动:*FILE *fp = NULL; fp = fopen("Network_Managment_Output.txt","w"); ** 现在出现在 main.cpp 中并创建了文件,但由于某种原因没有输出,输出函数现在是 **void Data_list :: print_msg (Data_list head,FILE* fp) //打印消息 {数据列表 * 开始 = 头; while(start!=NULL) { coutmessagemessage); //打印消息到输出文件 start=start->Next; } }
    • 我看不到任何问题,如果您可以发布您的代码...我的意思是您现在在做什么可能我可以提供帮助,因为我发送给您的代码正在运行。 .复制此代码并创建一个新项目(或文件 test.cpp 在单独的文件夹中)并编译/运行它并从控制台给我错误列表(复制它们)。
    猜你喜欢
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多