c - 请告诉我哪里错了

标签 c debugging

#include <stdio.h>
main()
{
    char name1[15],name2[15],name3[15];
    int no;

    printf("Enter the serial number and name one\n");
    scanf("%d %15c',&no, name1");
    printf("%d %15s\n\n",no,name1);

    printf("Enter serial number and name two\n");
    scanf("%d %s",&no,name2);
    printf("%d %15s\n\n",no, name2);

    printf("Enter serial number and name three");
    scanf("%d %15s",&no,name3);
    printf("%d %15s\n\n",no,name3);
}

嗨,我是编程新手,由于某些原因我开始使用 C。我上面输入的代码是我想要执行的程序。当我使用 Code::Blocks 执行它时,它会运行直到输入序列号并命名,然后如果我输入一个数字,它就会没有响应。然后我尝试使用 Visual Studio 2013 进行编译,它再次停止响应。

之后,我尝试使用 Visual Studio 2013 调试器进行调试,在按“继续”后,它显示了 temp.exe 中 0x7575B790 (msvcrt.dll) 处的第一次机会异常:0xC0000005:访问冲突写入位置 0x00000000。它说这个 Temp.exe 中 0x7575B790 (msvcrt.dll) 处未处理的异常:0xC0000005:访问冲突写入位置 0x00000000。 我之前已经在 Code::Blocks 中编程过,它们都运行良好。请告诉我哪里出错了。另请解释一下 %s 的用法。

谢谢

最佳答案

scanf("%d %15c',&no, name1");

应替换为:

scanf("%d %14s",&no, name1);
  • 使用双引号,因为单引号不会终止 C 中的字符串。
  • 使用 %14s (按照 chux 的建议),这样就不会溢出字符串缓冲区并导致段错误

%s 用于读取空格分隔的字符串。如果您想读取整行,则必须使用 fgets功能

关于c - 请告诉我哪里错了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27822762/

相关文章:

c++ - 在 visual studio 2005 中打印到控制台

python - 我怎么弄乱了python pdb

c - gdb 调试器最棘手/有用的命令

java - 观察变量看它是否改变值

c++ - 如果我在 C 或 C++ 中执行 `typedef`,我什么时候应该在 typedef'ed 类型的末尾添加 `_t`?

c++ - 如何初始化静态 arduino (C) 数据结构,然后使用它们?

c - 带有 %g 和正确的 double 值的 printf 打印出令人讨厌的数字 - 可能是什么原因?

c - 未定义的 C 结构前向声明

c - CFSTR() 是否分配内存?

debugging - 关于 ECLIM 的简短 HOW TO