为什么C程序(.exe)停止工作?

时间:2015-07-15 11:03:28

标签: c pointers

我尝试访问并将.ini文件中的数据存储到我的main程序中的数组中。为了验证数据是否真正存储,我还将它们打印出来(它们似乎是正确的)。但是,每次我运行主程序时,它都会执行,然后会出现一个弹出窗口,指出.exe文件已停止工作。有人可以看看并告诉我出了什么问题。

.ini文件是:

 [key]
 title= A,H,D

C程序:

var[100];
LPCSTR ini="C:\conf.ini";
GetPrivateProfileString("key", "title", 0, var, 100,ini);
int i=0;
char* arr[10];
char* buffer;
for(buffer=strtok(var, ",");buffer;buffer=strtok(NULL, ","))
{
    if (buffer !=NULL)
    {
       puts("")
       strcpy(arr[i], buffer);
       printf("the value is %S \n", arr[i]);
       i++;
    }
}
printf("first value %s", arr[0]);
printf("second value %s", arr[1]);
printf("third value %s", arr[2]);

输出我看起来像这样:

  The value is A 

  The value is H 

  The value is D 
  first value A 
  second value H 
  third value D 

1 个答案:

答案 0 :(得分:4)

假设在结束]中输入错误,并将其分开,

  strcpy(arr[i], buffer];

arr[i]在这里未初始化。尝试写入未初始化的内存会调用undefined behaviour

解决方案:在使用arr[i]之前,您需要为此分配内存。您可以查看malloc()和动态内存分配函数系列。

FWIW,你可能也想看看free()