c - 在循环中使用 printf 然后 scanf

标签 c printf scanf

char *str;
while(1)
{
    printf("$$$$>");
    scanf("%s",str);
}

在这段代码中,我只想打印命令提示符。当用户输入任何内容时,什么也不会发生,并再次打印命令提示符。但 scanf() 运行一次,然后循环打印 $$$$> 。 当我尝试采用字符数组而不是 str 指针时,代码就会运行。 为什么?

最佳答案

char *str;

您使用了str但没有初始化它。在另一个函数(如 scanf)中使用未初始化的指针会导致程序崩溃。

您可以通过 str 指针的 malloc(动态分配)来解决该问题,但对于这种简单的用法,您可以使用数组代替。

char str[100] = "";
while(1)
{
    printf("$$$$>");
    // scanf("%s",str);  // not recommended
    fgets( str, sizeof( str ), stdin );  // fgets is better
}

关于c - 在循环中使用 printf 然后 scanf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38673272/

相关文章:

c - Arduino Drone项目,当输出为 "loaded"(甚至上限为gnd)时,输入 "steering"命令开始出现故障

c - printf 改变内存值

c - read() 函数不允许在换行符后打印任何内容

c - 使用 C 使用 fscanf() 解析逗号分隔的文件

c++ - C 与 C++ 中具有静态存储持续时间的对象的初始化

c - 如何在使用标准 C 拒绝无效数字的同时将罗马数字转换为 int?

c - split 的意外结果

c++ - 警告 : format not a string literal and no format arguments

c - 让 scanf 在读取换行符时退出?

在 C 中读取和打印 .txt 文件行的最清晰方法