为什么返回char *时C不会发出任何警告?

时间:2019-03-21 21:58:24

标签: c

这是具有功能GetString的代码,它将返回一个char指针。 此char指针指向堆栈中的字符串。 现在,为什么返回该字符串的地址时C编译器不会发出任何警告?范围有限吗?真的有问题吗? “您好”是否存储在数据段中?

#include <stdio.h>
#include <string.h>

    char * GetString()
    {
       char *Hello = "Hello";

      return Hello;

    }

    int main(void)
    {
      printf("%s",GetString());
      return 0;
    }

1 个答案:

答案 0 :(得分:5)

char* GetString() 
{ 
    char Hello[] = "Hello"; 
    return Hello; 
}

将返回一个指向堆栈分配的字符串的指针。

char* GetString() 
{ 
    char* Hello = "Hello"; 
    return Hello; 
}

返回一个指向静态字符串的指针。 (并且您确实应该将其设置为char const*指针,因为字符串文字是有效的(但不是正式的)常量)。

即使您写了

char* GetString() 
{ 
    char Hello[] = "Hello"; 
    return Hello; 
} 

但是,编译器没有义务对此进行警告。 C不是Rust。