函数和返回const char *

时间:2012-05-19 21:18:03

标签: arrays c++-cli char constants

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;
}

返回类似的东西:

 bbb
 %^&$^$%

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

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:1)

p是一个局部变量,您可以按值返回,但指向字符串文字,它位于只读内存中,而不是在为方法分配的自动内存中

返回t并使用它确实会导致未定义的行为。

另外,不要认为指针和数组是等价的。