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

C char array lose pointer after assingment loop

我正在学习 C,在为结构数组中的 char 数组分配内存时,我陷入了困境。

在第一个循环中将值分配给 char 数组后,当我尝试在第二个循环中访问该值时。

有人能帮帮我吗?谢谢

对于初学者来说,此代码片段会调用未定义的行为

char string[numDigits];
sprintf(string, "%d", 12345);

因为数组string没有一个space来存储调用sprintf构建的字符串的终止零字符'[=16=]'。您需要声明数组

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++)
            ^^^^^^