C:fprintf不起作用

时间:2018-04-03 15:53:15

标签: 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 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");
  }  

此步骤一切正常:文件已打开,并在其上写入两行。

然后我有一个随机过程的长期模拟,其代码对于问题的目的并不感兴趣:文件及其指针从未使用过。在这个过程结束时我有:

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]);
}

然后我做两个文件的fflush()fclose()

如果我在笔记本电脑上运行代码,两个文件都会被填满。如果代码在远程服务器上运行,则文件fitness_data.txt仅包含第一个打印,即以#开头但不包含数据的打印。我要你注意:

  • 另一个文件永远不会给我带来麻烦。
  • 我习惯了这台服务器。类似的事情从未发生过。

鉴于所有这些信息,问题是:

为什么发生某个命令,总是以相同的方式和相同的代码使用,总是在服务器上工作,而在不同的服务器上它有时可以工作但有时却没有?

管理员:我不认为这个问题是重复的。通过调整代码(here)或添加fflush()here)和类似的东西来解决所有类似的问题。这不是代码中的问题(我的谦虚意见),因为在我的笔记本电脑上它可以工作。我打赌它适用于大多数人。

1 个答案:

答案 0 :(得分:4)

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

  • 当一个C程序在一台计算机上的行为与另一台计算机的行为不同时,您首先要怀疑的是内存损坏。查找内存损坏的最佳工具是valgrind。修复它报告的第一个无效操作并重复执行,直到它报告不再有无效操作为止。很有可能这个问题就会消失。

  • 将警告级别尽可能高,并修复所有投诉,即使是那些看起来很傻的投诉。

  • 您说您正在呼叫INSTALLED_APPSfflush,但是您是否正在检查他们是否失败?彻底检查,如下:

    fclose
  • 如果更改正在编译的优化级别,问题是否会消失?如果是这样,您可能会遇到导致&#34;未定义行为的错误&#34;。不幸的是,有一些很多可能的方法可以做到这一点,我不能轻易解释如何查找它们。

  • 使用像C-Reduce这样的工具将您的程序缩减为较小的程序,该程序仍然无法正常工作但足够短,无法在此处完整发布。

  • 阅读并遵循文章&#34; How to Debug Small Programs&#34; ..

  • 中的说明
相关问题