请告诉我哪里出错了

时间:2015-01-07 15:12:59

标签: 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。

由于

1 个答案:

答案 0 :(得分:6)

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

应替换为:

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

%s用于读取以空格分隔的字符串。如果要读取整行,则必须使用fgets函数