错误地复制到struct中

时间:2015-12-09 18:11:11

标签: c string

我正在将字符串传递给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!为什么会这样?但它并不是一直适用于大多数输入

1 个答案:

答案 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的投射结果。