我正在将字符串传递给struct,我就像在循环
中一样printf("copy = %s\n",copy_p);
str[i].string=(char*)malloc(strlen(copy_p)+1 * sizeof(char));
strcpy(str[i].string,copy_p);
printf("skop = %s\n" , str[i].string);
因此,如果copy_p
变量为"程序已停止工作"这就是发生的事情
printf("copy = %s\n",copy_p); // copy = Program has stopped working
printf("skop = %s\n" , str[i].string); // skop = Program has stopped working
但如果我称之为printf("%s\n",str[0].string)
,则输出Program has stopped work!
为什么会这样?但它并不是一直适用于大多数输入
答案 0 :(得分:6)
无论copy_p
的类型如何,此行都不正确:
str[i].string=(char*)malloc(sizeof(copy_p)+1 * sizeof(char));
如果copy_p
是用字符串文字初始化的字符数组,即
char copy_p[] = "Program has stopped working";
然后+1
是不必要的,因为数组大小已经包含空终止符。
如果copy_p
是指针char *copy_p
,则需要拨打strlen
而不是sizeof
,即
str[i].string=malloc(strlen(copy_p)+1 * sizeof(char));
注意: C中不需要malloc
的投射结果。