【发布时间】: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:
memcpy或strcpy。阅读基本的 C 教程……如果您将分配更改为strcpy(c, "test"),您可能会得到相同的结果,但具有未定义的行为。在 C 语言中,您无法仅通过编译和运行来确定某些代码是否有效……