-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)
您必须在要读取字符串的位置分配内存.例如
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将尝试更改导致程序未定义行为的字符串文字.