在C中,为什么这不起作用:
#include <stdio.h>
int main(void)
{
char * strA = "Hello ";
strcat(strA, "World!");
printf("%s", strA);
return 0;
}
但这确实:
#include <stdio.h>
int main(void)
{
char strA[6] = "Hello ";
strcat(strA, "World!");
printf("%s", strA);
return 0;
}
我本来会放错的,但唉,我用的是Xcode,它不喜欢在失败时给我任何可用的东西,只是给我坏的访问权限(code=2…),根据谷歌的快速搜索,这只是与内存分配错误有关。
我以为在这两种情况下,你为strA分配的内存量是一样的有人能开导我吗?
最佳答案
在第一种情况下,您声明strA
为char *
,指向包含字符串"Hello "
的静态内存。
在第二种情况下,您将创建一个由6个字符组成的数组,并用字符串"Hello "
初始化。strcat
因此,在第一种情况下,会尝试写入此静态内存段,从而立即导致错误。
第二个代码仍然无效(因为strA
不是存储"Hello World"
的足够大的数组),可能会或可能不会出现segfault,因为您没有试图附加到字符串文本。
关于c - C char指针strcpy内存错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18137898/