我正在将字符串传递给struct,我就像在for循环中一样
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!
为什么呢?但它并不总是适用于大多数输入
无论以下类型如何,此行都不正确copy_p
:
str[i].string=(char*)malloc(sizeof(copy_p)+1 * sizeof(char));
If 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));
注意:malloc
在C中不需要投射结果.