gpt4 book ai didi

c - 这个程序为 p 和 c 都给出了输出 "abc",但是如何呢?

转载 作者:太空宇宙 更新时间:2023-11-04 05:52:00 25 4
gpt4 key购买 nike

当pc赋值cdefg时,为什么打印abc。当它变得有趣时,它正在分配 pc= ""cdefg"

void fun(char *pc)
{
pc = malloc(5);
pc = "cdefg";
}

int main()
{
char *p = "abc";
char *c = p;
fun(p);
printf("%s %s\n",p,c);
}

最佳答案

你的程序之所以这样做,是因为 funpc 的赋值与 p 的赋值无关>主要。指针按值传递; fun 所做的任何更改都会被丢弃。

如果您想在函数内分配一个新值,请执行以下三项操作之一:

  • 将指针传递给指针,或者
  • 在调用者中分配一个缓冲区,并将其与缓冲区的长度一起传递给函数,或者
  • 从函数返回指针,并在调用者中赋值。

第一种方法:

void fun(char **ppc) {
*ppc = "cdefg";
}
...
fun(&p); // in main

第二种方法:

void fun(char *pc, size_t len) {
if (len >= 6) {
strcpy(pc, "cdefg");
}
}
...
char p[20]; // in main
fun(p, 20);

第三种方法:

char *fun() {
return "sdefg";
}
...
char *p = fun(); // in main

您的程序还有其他问题 - 例如,malloc 后的分配内存会泄漏。

关于c - 这个程序为 p 和 c 都给出了输出 "abc",但是如何呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38183672/

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