C中的字符串和字符串函数

Num*_*tor 2 c string strcpy

我写了以下内容:

#include <stdio.h>
#include <string.h>
char* getString();

char* getString(){
    char str[10];
    gets(str);
    return str;

}

int main() {

    char* s;
    s=getString();
    strcpy(s,"Hi");
    puts(s);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我知道长度str必须小于10,但即使我只写"嗨",也没有任何东西被打印出来.据我所知,它应该是好的.编译器说fgets is dangerous and should not be used.

什么原因没有在屏幕上打印?

小智 6

char str[10];
// ...
return str;
Run Code Online (Sandbox Code Playgroud)

这是错误的!当范围退出时,局部变量无效; 因此使用返回数组是未定义的行为.你必须malloc一个字符串并返回它:

return strdup(str);
Run Code Online (Sandbox Code Playgroud)