首页 > 解决方案 > 从函数 C++ 返回 C 样式字符串

问题描述

我想从函数返回一个 C 风格的字符串。我找到了这个解决方案: 解决方案

const char* myName() {
  char *name = "Flavio";
  return name;
}

但是我不明白这是如何工作的。为什么 c 字符串超出范围时不会被破坏?在这种情况下堆是如何工作的?对函数的连续调用会在堆上分配越来越多的内存;导致内存泄漏?如何从堆中清除字符串?

谢谢。

标签: c++cstring

解决方案


事实上,您的代码并不能说明您的问题。

您的代码的固定版本:

const char* myName() {
  const char *name = "Flavio";    // name is just a pointer to a literal
  return name;
}

在这里,您只需返回一个指向字符串字面量的指针:在任何地方都没有分配没有悬空指针

我从你的问题中了解到:

char* myName() {
  char name[] = "Flavio";        // name is an automatic array here
  return name;                   // Oops: dangling pointer
}

这是一个从文字内容初始化name的动态数组。一个新对象在每次调用时都会出现,并在函数返回时达到生命的尽头。调用者得到一个指向对象的指针(一个悬空指针)并使用它调用未定义的行为。


推荐阅读