函数和返回const char*

Nic*_*ova 2 arrays c++-cli constants char

const char* test(bool i)
{
    const char t[] = "aa\n";
    const char* p = "bbb\n";
    if(i)
        return p;
    return t;
}
int main(array<System::String ^> ^args)
{
     printf(test(true));
     printf(test(false));
     return 0;
}
Run Code Online (Sandbox Code Playgroud)

这会返回一些东西:

 bbb
 %^&$^$%
Run Code Online (Sandbox Code Playgroud)

很明显,test(false)返回一个指向局部变量的指针.问题是p也是局部变量.为什么在函数返回后没有清除"bbb \n"的内存.我认为const char []的解释方式与const char*相同,但它看起来并不正确.

das*_*ght 5

虽然它p是一个局部变量,但它指向的不是本地变量 - 它是一个编译时字符串常量; 从函数返回常量的地址是合法的.

t是不同的,因为编译时字符串常量被复制到自动存储区域,导致取消引用返回的指针时出现未定义的行为.

  • 严格来说,它不会返回导致未定义行为的指针,而是稍后取消引用它. (2认同)