【发布时间】:2021-05-19 11:05:02
【问题描述】:
我想从一个函数返回一个 C 风格的字符串。我找到了这个解决方案: Solution
const char* myName() {
char *name = "Flavio";
return name;
}
但是我不明白这是如何工作的。为什么 c 字符串超出范围时不会被破坏?在这种情况下堆是如何工作的?对函数的连续调用会在堆上分配越来越多的内存;导致内存泄漏?字符串是如何从堆中清除的?
谢谢。
【问题讨论】:
-
您发现的“解决方案”的用途相当有限。该教程并没有完全错误,但它具有很大的误导性
-
请在帖子中提供代码,而不是图片链接
-
连续调用函数会在堆上分配越来越多的内存;导致内存泄漏? 在呈现的情况下,没有分配内存。您正在返回一个指向字符串文字的指针。
-
我建议不要在尝试学习 C++ 时使用 C 教程。 C 和 C++ 是不同的语言,一种语言的事实和良好习惯通常不适用于另一种语言。编辑:关于您的编辑,这说明了我的观点。
char *name = "Flavio";在 C 中是允许的,但在 C++ 11 之后不允许在 C++ 中。你需要 C++ 中的const char *name = "Flavio";。 -
字符串如何从堆中清除?字符串不在堆中。