我正在使用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事件中仍然不会为空。
为什么会发生这种情况?!有谁知道为什么?
答案 0 :(得分:2)
缓冲区溢出的一个非常简单的例子。表达式sprintf(filename,"Record/record_%ld_%d.txt",g_recordName,i);
最有可能是罪魁祸首。
答案 1 :(得分:0)
非常感谢Ajay的帮助!是的,这个问题(缓冲区溢出)是由sprintf,fprintf引起的。似乎他们非常脆弱。所以我使用C ++改变了我的代码 - iostream和fstream。现在,它适用于我。 :)再次感谢你。