我正在学习C语言,当我在struct数组中为char数组分配内存时,我陷入了困境。
在第一次循环中将值赋给char数组后,当我试图在第二次循环中访问该值时。
有谁能帮帮我吗?谢谢你
对于初学者,此代码段调用未定义行为
char string[numDigits];
sprintf(string, "%d", 12345);
,因为数组string
没有空间来存储由sprintf
调用构建的字符串的终止零字符' '
。您需要像
char string[numDigits+ 1];
第二,下面的代码片段
table[i].str = malloc(sizeof(char) * numDigits);
table[i].str = string;
产生内存泄漏,因为首先分配了内存,并且将其地址分配给了指针table[i].str
,然后重新分配了指针。
你需要写
#include <string.h>
//...
table[i].str = malloc(sizeof(char) * ( numDigits + 1 ));
strcpy( table[i].str, string );
最后程序中的for循环应该重写为
for (i = 0; i < n; i++)
^^^^^^