当返回一系列字符或指针到char文字时的区别

Difference when returning an array of chars or a pointer to char literal

本文关键字:文字 char 区别 指针 返回 一系列 字符      更新时间:2023-10-16

我了解到,当我初始化一系列字符时,就像初始化指针的指针一样。但是,如果是这样,为什么以下代码输出奇怪的字符?

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?";

将指针返回到包含该字符串的存储器中的某个魔术位置(但不是局部变量),该字符串持续到程序的执行中,因此使用该指针不是未定义的行为。