Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C:fprintf不工作_C_File_Printf - Fatal编程技术网

C:fprintf不工作

C:fprintf不工作,c,file,printf,C,File,Printf,我有一个很长的C代码。开始时,我打开了两个文件并在上面写了一些东西: ffitness_data = fopen("fitness_data.txt","w"); if( ffitness_data == NULL){ printf("Impossible to open the fitness data file\n"); exit(1); }else{ fprintf(ffitness_data,"#This file contains all the d

我有一个很长的C代码。开始时,我打开了两个文件并在上面写了一些东西:

  ffitness_data = fopen("fitness_data.txt","w");
  if( ffitness_data == NULL){
    printf("Impossible to open the fitness data file\n");
    exit(1);
  }else{
    fprintf(ffitness_data,"#This file contains all the data that are function of fitness.\n");
    fprintf(ffitness_data,"#Columns: f,<p>(f),<l>(f).\n\n");
  }
  fmeme_data = fopen("meme_data.txt","w");
  if( fmeme_data == NULL){
    printf("Impossible to open the meme data file\n");
    exit(1);
  }else{
    fprintf(fmeme_data,"#This file contains all the data relative to memes.\n");
    fprintf(fmeme_data,"#Columns: fitness, popularity, lifetime.\n\n");
  }  
ffitness_data=fopen(“fitness_data.txt”,“w”);
if(FFI\U数据==NULL){
printf(“无法打开健身数据文件\n”);
出口(1);
}否则{
fprintf(fitness#u data,“#此文件包含所有与fitness有关的数据。\n”);
fprintf(ffitness#u data,“#列:f,(f),(f)。\n\n”);
}
fmeme_data=fopen(“meme_data.txt”,“w”);
if(fmeme_data==NULL){
printf(“无法打开meme数据文件”);
出口(1);
}否则{
fprintf(fmeme#u data,“#此文件包含与模因相关的所有数据。\n”);
fprintf(fmeme#U数据,“#列:适合度、流行度、寿命。\n\n”);
}  
这一步一切都很好:文件是打开的,上面写着两行

然后我对一个随机过程进行了长时间的模拟,其代码对于问题的目的来说并不有趣:文件及其指针从未被使用过。在流程结束时,我有:

for(i=0;i<data;i++){ 
 fprintf(fmeme_data,"%f\t%d\t%f\n",meme[i].fitness,meme[i].popularity,meme[i].lifetime);
}
for(i=0;i<40;i++){
 fprintf(ffitness_data,"%f\t%f\t%f\n",(1.0/40)*(i+0.5),popularity_histo[i],lifetime_histo[i]);
}

for(i=0;i我们无法确定这里发生了什么,因为我们没有您的完整程序,也无法访问发生问题的服务器。但是,我们可以给您一些调试建议

  • 当一个C程序在一台计算机上的行为与另一台计算机上的行为不同时,您首先应该怀疑的是内存损坏。查找内存损坏的最佳可用工具是。修复它报告的第一个无效操作并重复,直到它不再报告任何无效操作。出现此问题的可能性很大然后就走了

  • 尽可能提高警告级别,解决所有投诉,甚至那些看起来很愚蠢的投诉

  • 您说您正在调用
    fflush
    fclose
    ,但您是否正在检查它们是否失败?请仔细检查,如下所示:

    if (ferror(ffitness_data) || fflush(ffitness_data) || fclose(ffitness_data)) {
        perror("write error on fitness_data.txt");
        exit(1);
    }
    
  • 如果您更改编译时使用的优化级别,问题是否会消失?如果是,您可能有一个导致“未定义行为”的bug。不幸的是,有很多可能的方法可以做到这一点,我无法轻松解释如何查找它们

  • 使用一个工具,比如把你的程序简化成一个较小的程序,它仍然不能正常工作,但是足够短,可以完整地发布在这里

  • 阅读并遵循文章“”中的说明


    • 我们无法确定这里发生了什么,因为我们没有您的完整程序,也没有访问发生问题的服务器的权限。但是,我们可以给您一些调试建议

      • 当一个C程序在一台计算机上的行为与另一台计算机上的行为不同时,您首先应该怀疑的是内存损坏。查找内存损坏的最佳可用工具是。修复它报告的第一个无效操作并重复,直到它不再报告任何无效操作。出现此问题的可能性很大然后就走了

      • 尽可能提高警告级别,解决所有投诉,甚至那些看起来很愚蠢的投诉

      • 您说您正在调用
        fflush
        fclose
        ,但您是否正在检查它们是否失败?请仔细检查,如下所示:

        if (ferror(ffitness_data) || fflush(ffitness_data) || fclose(ffitness_data)) {
            perror("write error on fitness_data.txt");
            exit(1);
        }
        
      • 如果您更改编译时使用的优化级别,问题是否会消失?如果是,您可能有一个导致“未定义行为”的bug。不幸的是,有很多可能的方法可以做到这一点,我无法轻松解释如何查找它们

      • 使用一个工具,比如把你的程序简化成一个较小的程序,它仍然不能正常工作,但是足够短,可以完整地发布在这里

      • 阅读并遵循文章“”中的说明


      展示一些。您应该阅读的文档,并检查其故障。在服务器上,您可能使用与笔记本电脑不同的权限运行程序。最后,您的问题是操作系统特定的。在笔记本电脑上的
      valgrind
      下运行该程序,以排除内存损坏。顺便说一句,编译您自己的代码,其中包含所有警告和错误调试信息(例如,
      gcc-Wall-Wextra-g
      with…)。然后-即使在服务器上。对于问题而言,其代码不感兴趣,可能会发生非感兴趣代码中的某些溢出会破坏您的文件句柄,因此,
      fprintf
      无法工作…不同的机器,不同的条件…@Danielnotarmuzi:我已经写下了原因。如果没有其他人要求的“我说你调用了未定义的行为。我们既不是透视者,也不是调试服务。如果你不提供所需的信息,就仅此而已。将来:学习使用调试器。展示一些。你应该阅读文档,并检查其故障。在服务器上,你可能会使用不同的权限运行你的程序。”n在笔记本电脑上。最后,你的问题是操作系统特定的。在笔记本电脑上运行
      valgrind
      下的程序以排除内存损坏。顺便说一句,用所有警告和调试信息编译你自己的代码(例如,
      gcc-Wall-Wextra-g
      with…)。然后-即使在服务器上。对于问题而言,其代码不感兴趣,可能会发生非感兴趣代码中的某些溢出会破坏您的文件句柄,因此,
      fprintf
      无法工作…不同的机器,不同的条件…@Danielnotarmuzi:我已经写下了原因。如果没有其他人要求的我说你调用了未定义的行为。我们既不是透视者,也不是调试服务。如果你不提供所需的信息,就这样。将来:学会使用调试器。