在 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,它不喜欢在失败时给我任何可用的东西,只是给我 BAD_ACCESS_EXC(code =2...) 根据快速的 Google 搜索,只是与内存分配错误有关。
我认为您在这两种情况下为 strA 分配了相同数量的内存。有人可以启发我吗?
最佳答案
在第一种情况下,您将 strA
声明为 char *
,指向包含字符串 "Hello "
的静态内存。
在第二种情况下,您将创建一个 6 个字符的数组,并使用字符串 "Hello "
进行初始化。
strcat
会尝试写入此静态内存段,从而立即导致错误。
第二个代码仍然无效(因为 strA
不是一个足够大的数组来存储 "Hello World"
),可能会或可能不会像您一样出现段错误不尝试附加到字符串文字。
关于C char 指针 strcpy 内存错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18137898/