像这样使用constchar*返回字符串合法吗
Is it legal to return a string using `const char *` like this?
下面是从这个线程更改的代码:如何在我的C代码中返回字符串?
#include <stdio.h>
const char * getString();
int main()
{
printf("hello worldn");
printf("%sn", getString());
printf("%sn", getString2());
return 0;
}
const char * getString()
{
const char *x = "abcstring";
return x;
}
const char * getString2()
{
return "abcstring";
}
这看起来有点让我困惑,因为x
在getString
中指向的内存空间"abcstring"
似乎在堆栈上,而不是堆上。因此,为x
分配的存储器可以在getString
结束时被释放。如果是,printf("%sn", getString());
会失败吗?
那么printf("%sn", getString2());
呢?
为x分配的内存可以在getString结束时释放
是的,但仅对于x
,字符串文字不会。
字符串文字具有静态存储持续时间,因此在程序的整个生命周期中都存在于内存中。
根据C++标准,$2.13.5/8字符串文本[lex.String](我用粗体表示)
还引用了普通字符串文字和UTF-8字符串文字到作为窄字符串文字。窄字符串文字的类型为"array"of n const char",其中n是如下定义的字符串的大小,并且具有静态存储持续时间(3.7)
对于C字符串文字,
然后(在第7阶段),将终止空字符添加到每个字符串文字,然后每个文字初始化一个未命名的数组具有静态存储持续时间和刚好足以包含字符串文字的内容加上一个null终止符。
相关文章:
- C 字符串返回字符串的整数/双精度/长整型值
- std::hash<std::string> 可以为不同的字符串返回相同的值吗?
- Java 调用 dll 字符串返回类型方法
- 返回具有C++字符串返回值的函数的本地 C 字符串
- 如何将两个 jlong 数据类型转换为 jstring,然后将两个字符串连接在一起以便从 JNI 将字符串返回给 jav
- 尝试以随机字符(长读取)打印字符串返回结果
- 从字符串返回 i(索引)字
- 函数读取最大和min int值,并用文本字符串返回
- 如何将 YAML 节点中的序列作为字符串返回?
- 将注册表项读取为字符串返回数值
- 为什么我在尝试打印字符串返回时收到编译器错误?
- 使用 char*array 存储条形图的条形图,以便我可以动态制作它并作为字符串返回
- 字符串返回功能不起作用 - 'identifier is underfined'
- 将C 本地字符串返回到另一个功能
- 在MATLAB中仅接受INT32PTR时,将错误编号作为字符串返回
- 字符串流到字符串返回
- 字符串返回错误的长度
- 从共享指针矢量字符串返回值
- C++随机字符串返回意外结果
- 临时标准::字符串返回垃圾