C字符数组在赋值循环后丢失指针



我正在学习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++)
^^^^^^

相关内容

  • 没有找到相关文章

最新更新