c++ - 从函数 C++ 返回 C 样式字符串
问题描述
我想从函数返回一个 C 风格的字符串。我找到了这个解决方案: 解决方案
const char* myName() {
char *name = "Flavio";
return name;
}
但是我不明白这是如何工作的。为什么 c 字符串超出范围时不会被破坏?在这种情况下堆是如何工作的?对函数的连续调用会在堆上分配越来越多的内存;导致内存泄漏?如何从堆中清除字符串?
谢谢。
解决方案
事实上,您的代码并不能说明您的问题。
您的代码的固定版本:
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
的动态数组。一个新对象在每次调用时都会出现,并在函数返回时达到生命的尽头。调用者得到一个指向死对象的指针(一个悬空指针)并使用它调用未定义的行为。
推荐阅读
- sql - 计算表中丢失的文件或记录
- python - 达到 k 的最小步数
- java - Android-Java HTTPCLIENT 通过 Content-Disposition 图片上传发送 http 参数
- grails - 如何将grails 3中的动作映射到“/”?
- kubernetes - Kubernetes Pod 上的 CockroachDB 集群崩溃
- reactjs - 为什么 this.setState 在我的点击功能中没有更新?
- c++ - 为什么这个按位运算是“从'int'到'byte'的缩小转换”?- 阿杜诺
- javascript - body:after 出现在每个打印页面上
- swift - 如何在 Realm 对象上建模 Swift 字典属性?
- linux - 无法在 cpanel (Linux) 上运行 Elasticsearch