我有点卡在这里...当使用这个 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/