int main()
{
int Age;
char Name;
//Age
printf("Type your age: ");
scanf_s("%d", &Age);
printf("Your age is %d\n", Age);
//Name
printf("Type your Name: ");
scanf_s("%s", &Name);
printf("Your name is %s", Name);
return 0; }
这是“名称”部分,抛出一个错误。我不知道为什么。
更新:我正在Visual Studio中编码。因此,基本上需要“ scanf_s”。
错误是“ Project1.exe中的0x5B49D4EC(ucrtbased.dll)引发异常:0xC0000005:发生访问冲突写入位置0x001A0000。”
答案 0 :(得分:2)
您的问题是char Name;
只能存储一个字符。您的代码允许用户输入存储在Name
中的多个字符,从而导致内存错误。
将char Name;
更改为char Name[50]
之类,以便您最多可以存储49个字符以及null
字节。
此外,如果缓冲区(字符数组)最终变得太小,则应正确使用scanf_s()
以避免错误。
请注意,您应始终检查scanf_s()
的返回值,以便知道用户是否输入了有效数据。
此代码在Visual Studio中正常工作:
#include "stdafx.h"
#include <string.h>
#include <stdlib.h>
int main()
{
int Age;
char Name[50];
printf("Type your age: ");
if(scanf_s("%d", &Age))
{
printf("Your age is %d\n", Age);
printf("Type your Name: ");
if (scanf_s("%s", Name, (unsigned)_countof(Name)))
{
printf("Your name is %s\n", Name);
}
else
{
printf("Name:: Invalid Input\n");
}
}
else
{
printf("Age:: Invalid Input\n");
}
return 0;
}
答案 1 :(得分:1)
问题是您将Name
定义为char
(单个字符),但是您试图将其用作字符串(多个字符)。
要解决此问题,您必须(a)将Name
定义为字符(可能是字符串)的数组-例如char Name[100];
或(b)指针(例如char *Name;
)-要求您在使用前malloc()
字符串,在使用后free()
字符串。
字符串可能很棘手,因为它们基本上只是char
的数组,但这要求您要么知道,要么找到一种方法来知道字符串中将包含多少个字符。您可以阅读有关如何进行此操作的here, in the documentation for scanf_s的更多信息,其中给出了以下示例:
char c[4];
scanf_s("%4c", &c, (unsigned)_countof(c)); // not null terminated
答案 2 :(得分:0)
首先,我只使用scanf(),而不使用scanf_s()。 此外,您需要将Name变量转换为字符串,这是一个字符数组,正如我在下面定义的那样。仅使用char Name表示您已经创建了一个仅包含一个字符的带有空格的变量。
希望这会有所帮助:)
int main()
{
int Age;
char Name[10];
printf("Type your age: ");
scanf("%d", &Age);
printf("Your age is %d\n", Age);
//Name
printf("Type your Name: ");
scanf("%s", &Name);
printf("Your name is %s", Name);
return 0;
}
答案 3 :(得分:0)
通过...解决了问题。
“工具”->“选项”->“调试”->“符号”,然后选中“ Microsoft符号服务器”复选框,Visual Studio将自动下载PDB。
感谢大家的帮助:)