gpt4 book ai didi

c - 如何在 C 中返回 ReadLine() 函数?

转载 作者:行者123 更新时间:2023-11-30 18:04:59 26 4
gpt4 key购买 nike

我有点卡在这里...当使用这个 conReadLine() 函数两次时,它返回与我之前读取的第二个字符串相同的地址。例如,如果它要求输入两次名称,并且我输入“NameA”和“NameB”,则存储的结果是“NameB”和“NameB”。我明白为什么会发生这种情况,但我不知道如何解决。将“buffer”声明为静态会起到同样的作用。我怎样才能让这个函数在每个字符串上返回一个单独的地址?

const char *conReadLine(void)
{
char buffer[MAX_BUFFER];

fgets(buffer, MAX_BUFFER, stdin);

// Check for newline character.
char *newline = strchr(buffer, '\n');
if (newline)
*newline = '\0';

return buffer;
}

最佳答案

这样做:

const char *conReadLine(void)
{
char buffer[MAX_BUFFER];
// something
return buffer;
}

返回一个指向已释放堆栈的指针,这是非常糟糕的。它还会带来不可预测的结果,包括与其他调用甚至其他函数一起重用相同的地址!

您需要这样做:

const char *conReadLine(void)
{
char *buffer = (char*)malloc(MAX_BUFFER);
// something
return buffer;
}

每次都会给你一个新的内存位置。只需记住在使用完毕后释放它即可。

关于c - 如何在 C 中返回 ReadLine() 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7128972/

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