c - 为什么 scanf 在读取字符串时会崩溃?

标签 c string scanf

这只是我编写的一个小程序,用于查找较大程序的问题。当我用 scanf 添加行时,一切都变了。我知道这不安全,我阅读了其他有关建议其他功能的 printf 错误的线程。除了 cin 什么都可以。顺便说一句,我没有选择来 self 的老师的“消息”的类型定义,所以我无法更改它们。

#include <stdio.h>
#include <string.h>


char message1 [] = "amfdalkfaklmdklfamd.";
char message2 [] = "fnmakajkkjlkjs.";
char initializer [] = ".";
char* com;
char* word;
int main()
{   
    com = initializer;
    int i = 1;
    while (i !=4)
    {   
        printf ("%s \n", com);
        scanf("%s",word);
        i++;
    };  
    return 0;
}

问题:单次迭代后程序退出,没有打印任何内容。

最佳答案

scanf 崩溃的原因是缓冲区未初始化:word 尚未分配值,因此它指向任何地方。

您可以通过为缓冲区分配一些内存并将 scanf 限制为一定数量的字符来修复它,如下所示:

char word[20];
...
scanf("%19s", word);

请注意,%s 之间的数字表示字符串中的最大字符数,比实际缓冲区的长度。这是因为空终止符,这是 C 字符串所必需的。

关于c - 为什么 scanf 在读取字符串时会崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25345592/

相关文章:

javascript - 如何在 JavaScript 中解析日期时间字符串的日期部分?

c - C中这个奇怪的函数定义语法是什么?

c++ - GDB-Python 脚本 : any samples iterating through C/C++ struct fields

C 编程 - Strdup 未正确捕获文件名并将其存储在数组中

java - 在 Java 中清理文件名

java - 读取文件和写入新文件时替换与特定值不同的字符

c - 十六进制计算器,使用 scanf 解析字符串

c - 为什么 char * malloc 给我一个 scanf 的段错误?

c - 为什么这个 fscanf() 在使用大文件时会出现段错误?

c - 即使 SIGKILLed 但正常进程不会做同样的事情,终端也会与所有 child 一起出现故障