gpt4 book ai didi

c - 使用非 malloced 指针变量交换名称(malloced 名称)

转载 作者:行者123 更新时间:2023-11-30 20:45:57 33 4
gpt4 key购买 nike

我对指针感到困惑。这是交换两个名称的代码。请看代码。考虑输入:hellohai(对于 d)和 asd(对于 e)。我得到的输出:asd 1ellohai 1ellohai

#include<stdio.h>
#include<stdlib.h>

int main()
{
char *d,*e,*f;


d=(char*)malloc(10);
e=(char*)malloc(5);

scanf("%s",d);
scanf("%s",e);

f=d;
d=e;
e=f; //while printing e it prints the whole value contained in f (i.e.1ellohai). How? size of e is 5 only

f[0]='1'; // f is in read-only memory. So this should fail?
printf("%s \t %s \t %s \n",d,e,f);


return 0;
}

最佳答案

当你交换指针时,你交换的是指针变量中的内存位置。 f 具有 d 的旧值,并指向通过 malloc 分配的内存。因此

f[0]='1'; // f is in read-only memory. So this should fail?

不正确。

其次解释输出。在交换之前,您基本上有 d 指向包含 "hellohai" 的字符串,而 e 指向包含 "asd"。交换后,fe 指向包含 "hellohai" 的字符串,d 指向包含 “asd”。然后,您可以通过 f 修改 fe 所指向的字符串,因此现在为 "1ellohai" 。然后打印所有内容,输出符合预期。

malloc分配的内存是可写的。您可能将其与以下内容混淆:

char *f = "hello";
f[0] = '1';

这是一个坏主意,会导致未定义的行为。

最后,作为 C 语言的警告 it is generally not a good idea to cast the result of malloc .

关于c - 使用非 malloced 指针变量交换名称(malloced 名称),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32524790/

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