FILE指针神秘地重置为NULL

时间:2011-07-22 11:39:07

标签: visual-c++ file-io visual-c++-2008

我正在使用visual stduio 2008 c ++。而我正在编写Windows窗体应用程序。我在Form1.h的顶部声明了一个FILE *数组作为全局值

const int k = 1; //i need to change k to 2 sometimes. 
FILE* myFiles[k]; 

在From1的构造函数中,我使用for循环来打开我的文件。

for(int i = 0; i < k; ++i)
{    
  char filename[100] = "";
  sprintf(filename,"Record/record_%ld_%d.txt",g_recordName,i);
  myFiles[i] = fopen(filename,"w");
}

我为这个表单设置了一个计时器,每个表单都会将一些内容写入myFiles。 到目前为止一切都很好,但如果我放了类似

的东西
fprintf(myFiles[0],"%d",1234); 

在for循环后进入构造函数。这行正常,但是如果我要在计时器的tick事件中找到任何东西,我发现myFiles [0]已经设置为NULL !!

另外,如果我在construtor中fprintf(myFiles[0],"something"),那么FILE指针在计时器的tick事件中仍然不会为空。

为什么会发生这种情况?!有谁知道为什么?

2 个答案:

答案 0 :(得分:2)

缓冲区溢出的一个非常简单的例子。表达式sprintf(filename,"Record/record_%ld_%d.txt",g_recordName,i);最有可能是罪魁祸首。

答案 1 :(得分:0)

非常感谢Ajay的帮助!是的,这个问题(缓冲区溢出)是由sprintf,fprintf引起的。似乎他们非常脆弱。所以我使用C ++改变了我的代码 - iostream和fstream。现在,它适用于我。 :)再次感谢你。