当返回一系列字符或指针到char文字时的区别
Difference when returning an array of chars or a pointer to char literal
我了解到,当我初始化一系列字符时,就像初始化指针的指针一样。但是,如果是这样,为什么以下代码输出奇怪的字符?
char* returnMe()
{
char text[] = "Will I live forever?";
return text;
}
以下代码:
char* returnMe()
{
char* text = "Will I live forever?";
return text;
}
输出:
我会永远生活吗?
这两个初始化之间到底有什么区别?他们俩都像指针一样,所以如果我这样做:
puts(X); //puts get char* as a parameter in it.
它将用于两种情况下(当我还没有超出范围时。)
包含此的函数:
char text[] = "Will I live forever?";
将指针返回到一个名为 text
的本地变量,其中包含 字符串"我会永远活着吗?"。与所有局部变量一样,该变量在函数返回后蒸发,因此,如果您尝试访问它,则在未定义的行为土地上脱离。
包含此的功能:
char* text = "Will I live forever?";
将指针返回到包含该字符串的存储器中的某个魔术位置(但不是局部变量),该字符串持续到程序的执行中,因此使用该指针不是未定义的行为。
相关文章:
- 初始化或分配空字符串文字到指向 C 中的 char 的指针或指向 C++ 中 const char 的指针的原因是什么
- 通过 constexpr 中的 'const char *' glvalue 访问字符串文字的值会出错
- 字符串文字到 char 数组的转换如何在C++中实际工作
- 来自 cpp首选项的用户定义的 const char* 文字示例
- 使用 const char * 文字作为 std::map 键是否安全
- 在同一分配语句中进行const char*的多个字符串文字
- 为什么通过添加字符串文字和char初始化时,为什么不打印字符串
- 当返回一系列字符或指针到char文字时的区别
- 初始化char数组和具有整数文字的char时的差异
- 警告从char文字转换为char*
- 为什么允许将字符串文字分配给 C++ 中 char * 类型的指针
- 不赞成将字符串文字转换为char*
- 为什么gcc允许字符串文字大于数组的char数组初始化
- C 和 C++ 字符串文字弃用 char * = "stringLiteral" ;
- 在C 中,这是用字符串文字初始化char数组的好习惯
- 当一个函数可以被赋予一个 char* 或文字字符串时,声明这个函数的正确方法是什么?
- 为什么不允许我将函数返回 const char* 的结果分配给 char*,bt 可以将字符串文字(常量)分配给 cha
- 从字符串文字转换为char*
- 为什么我可以将字符串文字初始化为const char*和QString,而不是QString*
- 如何使用字符串文字优雅地初始化 vector<char *>?