请告诉我哪里出错了

Please tell me where I've gone wrong

#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 执行它时,它一直运行到 输入序列号和名称 one 然后如果我输入一个数字,它就会变得没有响应。然后我尝试使用 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 用于读入 space 分隔的字符串。如果要阅读整行,则必须使用 fgets 函数