这是具有功能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;
}
答案 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。