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