如何使用scanf_s读取多个字符?
我应该写一个程序,输入两个字符,中间有一个空格。出于某种原因,我无法使用单个扫描,因为它会引发异常 是我做错了什么还是根本不可能如何使用scanf_s读取多个字符?,c,character,C,Character,我应该写一个程序,输入两个字符,中间有一个空格。出于某种原因,我无法使用单个扫描,因为它会引发异常 是我做错了什么还是根本不可能 #include <stdio.h> int main() { char character1, character2; printf("type in 2 small letters with a space inbetween: "); scanf_s("%c %c", &charact
#include <stdio.h>
int main()
{
char character1, character2;
printf("type in 2 small letters with a space inbetween: ");
scanf_s("%c %c", &character1, &character2);
//this part prints big letter version of the one i typed in and its integer value
printf("%c %d\n", character1 - 32, character1 - 32);
printf("%c %d\n", characer2 - 32, character2 - 32);
return 0;
}
#包括
int main()
{
字符1,字符2;
printf(“键入两个小字母,中间有空格:”);
扫描(“%c%c”、&character1和&character2);
//这一部分打印我输入的一个大字母版本及其整数值
printf(“%c%d\n”,字符1-32,字符1-32);
printf(“%c%d\n”,字符2-32,字符2-32);
返回0;
}
因为我使用的是scanf_s而不是常规scanf,所以我需要指定如下缓冲区大小:
scanf_s("%c %c", &character1, 1, &character2, 1);
另一个选项是使用scanf,但我必须抑制警告:
#define _CRT_SECURE_NO_WARNINGS 1
#define _WINSOCK_DEPRECATED_NO_WARNINGS
您从scanf_s得到什么样的异常?@AlexanderUshakov-在Uloha1.exe中的0x0FD398F1(ucrtbased.dll)抛出异常:0xC0000005:访问冲突写入位置0x00AA1343。根据标准()和注4:“fscanf_s函数与fscanf等效,除了c、s和[转换说明符适用于一对参数…”@user3121023
scanf_s(%c%c),&character1,(rsize_t)1,&character2,(rsize_t)1);
如果要使用scanf_s(),则需要先将预处理器常量设置为1,然后再包含
函数。但我不认为这是您的问题的原因。1
是一个int
,scanf\u s()
需要一个rsize\u t
。这会导致UB。在您的平台上,它可能会工作,因为它们都使用一个寄存器,或者都具有相同的大小,但它是UB。将它转换为rsize\u t
。