请告诉我我在哪里';我做错了 #包括 main() { 字符名称1[15],名称2[15],名称3[15]; 国际贸易编号; printf(“输入序列号和名称\n”); scanf(“%d%15c',&no,name1”); printf(“%d%15s\n\n”,否,名称1); printf(“输入序列号和名称两\n”); scanf(“%d%s”,编号(&N),名称2); printf(“%d%15s\n\n”,编号,名称2); printf(“输入序列号和名称三”); scanf(“%d%15s”,&no,name3); printf(“%d%15s\n\n”,编号,名称3); }
嗨,我是编程新手,出于某些原因,我从C开始。我上面键入的代码是我要执行的程序。当我用Code::Blocks执行它时,它一直运行,直到输入序列号并命名一个,然后如果我输入一个数字,它就没有响应。然后我尝试使用Visual Studio 2013进行编译,但它再次停止响应 之后,我尝试使用Visual Studio 2013调试器进行调试,它在temp.exe:0xC0000005:访问冲突写入位置0x00000000中的0x7575B790(msvcrt.dll)处显示此第一次意外异常。按“继续”后,它在temp.exe:0xC0000005:访问冲突写入位置0x00000000中的0x7575B790(msvcrt.dll)处显示此未处理的异常。 在此之前,我已经在Code::Blocks中进行了编程,它们都工作得很好。请告诉我哪里出了问题。另外,请解释%s的用法 谢谢 应替换为:请告诉我我在哪里';我做错了 #包括 main() { 字符名称1[15],名称2[15],名称3[15]; 国际贸易编号; printf(“输入序列号和名称\n”); scanf(“%d%15c',&no,name1”); printf(“%d%15s\n\n”,否,名称1); printf(“输入序列号和名称两\n”); scanf(“%d%s”,编号(&N),名称2); printf(“%d%15s\n\n”,编号,名称2); printf(“输入序列号和名称三”); scanf(“%d%15s”,&no,name3); printf(“%d%15s\n\n”,编号,名称3); },c,debugging,C,Debugging,嗨,我是编程新手,出于某些原因,我从C开始。我上面键入的代码是我要执行的程序。当我用Code::Blocks执行它时,它一直运行,直到输入序列号并命名一个,然后如果我输入一个数字,它就没有响应。然后我尝试使用Visual Studio 2013进行编译,但它再次停止响应 之后,我尝试使用Visual Studio 2013调试器进行调试,它在temp.exe:0xC0000005:访问冲突写入位置0x00000000中的0x7575B790(msvcrt.dll)处显示此第一次意外异常。按“继续
scanf("%d %15c',&no, name1");
- 使用双引号,因为单引号不会在C中终止字符串
- 使用
(按照chux的建议),这样就不会使字符串的缓冲区溢出并导致seg故障%14s
%s
用于读取以空格分隔的字符串。如果要读取整行,必须使用函数read。在这里,您可以找到printf
和scanf
的文档。如果你不明白它们是怎么工作的,你可能就不知道出了什么问题。我很抱歉这么愚蠢。谢谢,顺便说一句:我只是想重申一下楚克斯的观点。注意chux写的是14而不是15。这将确保在添加null终止字符时,scanf不会导致缓冲区溢出。
scanf("%d %15c',&no, name1");
scanf("%d %14s",&no, name1);