gpt4 book ai didi

c - 为什么指向 Char 的指针并不总是需要 Malloc?

转载 作者:行者123 更新时间:2023-11-30 20:49:35 26 4
gpt4 key购买 nike

为什么下面的代码有效:

char *p;

p="hello";

printf("%s\n",p);

虽然这个没有:

char *p;

strcpy(p,"hello");

printf("%s\n",p);

我知道添加 p=malloc(4);在第二个示例中将使代码正常工作,但这正是我的问题。为什么第二个示例需要 malloc 而第一个示例不需要呢?

我在 SO 上查找了类似的问题,但没有人准确回答这个问题。

最佳答案

p 是一个指针。您需要使其指向某物。在第一种情况下,

 p = "hello";

使p指向运行时位于程序内存中某处的字符串文字。

在第二种情况下,您没有使 p 指向任何内容,因此执行任何查看 p 指向位置的操作都是无效的。

p = malloc(some_size);

使p指向一 block 可以容纳some_size个字符的(未初始化的)内存。如果你保留了足够的空间,你就可以做类似 strcpy(p, "hello") 的事情,因为 p 确实指向一个有效的内存区域,所以复制到内存中指向 -通过 p 就可以了。请注意,some_size 必须至少与您要复制到其中的内容一样大,包括 '\0' 字符串终止符。

注意这样做:

p = "hello";
strcpy(p, "bye");

将无效,因为“hello”可以存储在只读存储器中,因此您无法覆盖它。

关于c - 为什么指向 Char 的指针并不总是需要 Malloc?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7967679/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com