在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分配的内存量是一样的有人能开导我吗?

最佳答案

在第一种情况下,您声明strAchar *,指向包含字符串"Hello "的静态内存。
在第二种情况下,您将创建一个由6个字符组成的数组,并用字符串"Hello "初始化。
strcat因此,在第一种情况下,会尝试写入此静态内存段,从而立即导致错误。
第二个代码仍然无效(因为strA不是存储"Hello World"的足够大的数组),可能会或可能不会出现segfault,因为您没有试图附加到字符串文本。

关于c - C char指针strcpy内存错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18137898/

10-11 21:04