从用户获取字符串并使用strlen()查找其长度时的分段错误(核心转储)

-1 c pointers segmentation-fault

我知道字符串文字存储在只读内存中,因此您无法更新它们.但是strlen()函数有什么问题.如果我在程序中初始化char*s,它会起作用.即

char *s="hey";
length=strlen(s);
printf("%d\n",length);// this works  
Run Code Online (Sandbox Code Playgroud)

从用户那里拿字符串时不会

char *s;
int length;
scanf("%s",s);
length=strlen(s);
printf("%d\n",length); //this doesn't. gives segmentation fault  
Run Code Online (Sandbox Code Playgroud)

Vla*_*cow 5

您必须在要读取字符串的位置分配内存.例如

char s[20] = { '\0' };
int length;
scanf("%19s",s);
length=strlen(s);
printf("%d\n",length); 
Run Code Online (Sandbox Code Playgroud)

如果你宣布这样的话

char *s;
Run Code Online (Sandbox Code Playgroud)

然后指针未初始化.

如果你宣布这样的话

char *s="hey";
Run Code Online (Sandbox Code Playgroud)

然后scanf将尝试更改导致程序未定义行为的字符串文字.