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

标签 c pointers segmentation-fault

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

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

从用户处获取字符串时不会

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

最佳答案

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

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

如果你这样声明 s

char *s;

则指针未初始化。

如果你这样声明 s

char *s="hey";

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

关于c - 从用户获取字符串并使用 strlen() 查找其长度时出现段错误(核心转储),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32036209/

相关文章:

c - Ncurses 库和从文件中读取

c - 段错误(核心转储)和 zlib

c - C 库周围的 Ruby 扩展包装器无法加载已安装的库

java - JNI 中的二维数组

通过++i 在 for 循环中检查条件

c - 使用链接在一起的多个箭头运算符 (->) 有什么缺点吗?

C++ 指针有帮助吗?

void 指针可以安全地指向另一个指针吗?

c - 递归调用函数时出现段错误

c++ - 如何创建静态分配的动态大小的数组?