当前位置:  开发笔记 > 编程语言 > 正文

错误地复制到struct中

如何解决《错误地复制到struct中》经验,为你挑选了1个好方法。

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



1> dasblinkenli..:

无论以下类型如何,此行都不正确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中不需要投射结果.

推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有