0

我正在使用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循环之后进入构造函数。这条线可以正常工作,但是如果我要在计时器的滴答事件中 fprintf 任何东西,我发现 myFiles[0] 已经设置为 NULL!

此外,如果我fprintf(myFiles[0],"something")在构造函数中,FILE 指针在计时器的滴答事件中仍然不会为空。

为什么会这样?!有谁知道为什么?

4

2 回答 2

2

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

于 2011-07-22T12:18:25.840 回答
0

真的感谢Ajay的帮助!是的,这个问题(缓冲区溢出)是由 sprintf、fprintf 引起的。似乎他们很脆弱。所以我使用 C++ 之类的东西——iostream 和 fstream 更改了我的代码。现在,它对我有用。:) 再次感谢你。

于 2011-07-23T09:48:15.097 回答