【问题标题】:Difference between assignment by = sign and strcopy [duplicate]通过=符号和strcopy赋值之间的区别[重复]
【发布时间】:2014-07-22 02:32:54
【问题描述】:

以下代码输出“test”。它不应该只打印“te”吗,因为只为 x 分配了两个字节?

char *x = malloc(sizeof(char)*2);
x = "test";
printf("%s",x);

strcopy 如何正确完成这项工作?

【问题讨论】:

  • 你没有做你认为的那样......你正在重新分配 x 以指向不同的常量字符串并泄漏你分配的内存。
  • 这看起来不像是重复的,这里的 OP 正在为 x 分配一个新值,而不是复制内容。
  • @JohnH 如果我使用 x= "te"; 还会这样吗? ?
  • 阅读@user93353 发布的链接。它展示了如何做到这一点,并解释了后果。
  • @user33856:memcpystrcpy。阅读基本的 C 教程……如果您将分配更改为 strcpy(c, "test"),您可能会得到相同的结果,但具有未定义的行为。在 C 语言中,您无法仅通过编译和运行来确定某些代码是否有效……

标签: c mingw


【解决方案1】:

其实如果在调用前后打印x的值:

x = "test";

你会看到它已经改变了。通过丢失分配内存的轨道,您将面临内存泄漏。

此外,printf 打印一个从指针位置开始的字符串,直到找到以 '\0' (0) 结尾的字符串。

建议的解决方案:

char* x = malloc(5);    /* sizeof(char) is always equal to 1 */
strcpy(x, "test");

【讨论】:

  • 您能否在答案中添加我如何使用这两个字节来包含字符“te”?
  • 你至少需要三个字节来完成它 't' 'e' '\0' 对于动态分配: char *x = malloc(sizeof(char)*3); strcpy(x, "te");
猜你喜欢
  • 2014-10-26
  • 1970-01-01
  • 1970-01-01
  • 2017-12-25
  • 2012-02-22
  • 1970-01-01
  • 2011-05-19
  • 2018-10-23
  • 1970-01-01
相关资源
最近更新 更多