gpt4 book ai didi

c++ - 如何将 const char* 从一个函数转移到另一个函数?

转载 作者:行者123 更新时间:2023-12-02 02:08:18 25 4
gpt4 key购买 nike

这是我正在尝试做的示例:

#include <stdio.h>

FILE* f;
const char* getstring()
{
f = fopen ("hello.txt", "r");
char x[200];
for (int i = 0; i < 200; i++) x[i] = 0;
for (int c = getc(f), i = 0; (c != EOF) && (i < 200); c = getc(f), i++)
x[i] = c;
fclose(f);
printf ("getstring(): x = %s", x);
const char* y = x;
printf ("getstring(): y = %s", y);
return y;
}

void printstring (const char* string)
{
printf ("%s", string);
}

int main()
{
printstring(getstring());
printf ("\nprintf: %s", getstring());
return 0;
}

输出是:

getstring(): x = Hello World
getstring(): y = Hello World
���getstring(): x = Hello World
getstring(): y = Hello World

printf: ��������

我不知道为什么 printstring() 函数没有输出任何内容而 printf 正在输出随机数据,或者为什么在末尾有一些随机数据当我使用 printstring() 函数时的 string

有什么办法可以解决这个问题吗?我做错了什么?

最佳答案

问题

问题是 getstring() 返回一个指向本地数组的指针。当函数返回时,该数组将被破坏,因此您有一个悬空指针。使用该指针是未定义的行为。任何事情都可能发生:例如,您可以获得垃圾随机值,您可以获得旧的未更改值,或者系统可能崩溃。

解决方案

由于这个问题被标记为c++,只需使用std::string而不是char*,这种噩梦就会永远消失。

请注意,在 prinf() 中使用 std::string 需要使用 .c_str() 获取指针。

如果出于某种不明原因,您需要使用 char*,则必须使用 strdup() 或为 c 字符串分配一些内存并返回指向该内存的指针。但如果您不希望内存泄漏,调用者必须删除该指针。

关于c++ - 如何将 const char* 从一个函数转移到另一个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59707351/

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