#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/