用scanf_s读取字符
我只是和C混在一起,遇到了这个小问题。从我的输出可以看出,我得到了╠' 这个角色用scanf_s读取字符,c,windows,visual-c++,c11,tr24731,C,Windows,Visual C++,C11,Tr24731,我只是和C混在一起,遇到了这个小问题。从我的输出可以看出,我得到了╠' 这个角色 #include <stdio.h> int main(void) { char c; printf("Do you want to be X's or O's?\n"); scanf_s("%c", &c); printf("You chose %c\n", c); } #包括 内部主(空) { 字符c; printf(“您想成为X的还是O的?\n”);
#include <stdio.h>
int main(void)
{
char c;
printf("Do you want to be X's or O's?\n");
scanf_s("%c", &c);
printf("You chose %c\n", c);
}
#包括
内部主(空)
{
字符c;
printf(“您想成为X的还是O的?\n”);
scanf_s(“%c”和“&c”);
printf(“您选择了%c\n”,c);
}
请参见
scanf_s,您必须提供长度[1]:
char c;
scanf_s("%c", &c, 1);
在scanf_s
的情况下,可以将%c
看作是%1c
的一个特殊快捷方式,这使得这一点更加清楚
MSDNAA声明[1]:
与scanf和wscanf不同,scanf_s和wscanf_s要求为类型为c
,c
,s
,s
[…]的所有输入参数指定缓冲区大小
[1] 使用scanf\u s
必须提供长度[1]:
char c;
scanf_s("%c", &c, 1);
在scanf_s
的情况下,可以将%c
看作是%1c
的一个特殊快捷方式,这使得这一点更加清楚
MSDNAA声明[1]:
与scanf和wscanf不同,scanf_s和wscanf_s要求为类型为c
,c
,s
,s
[…]的所有输入参数指定缓冲区大小
[1] 的文档说明:
对于字符,单个字符可按如下方式读取:
char c;
scanf_s("%c", &c, 1);
因此,以下内容应该可以使用(请参阅现场演示)
#包括
内部主(空)
{
char i;
printf(“您想成为X的还是O的?\n”);
scanf_s(“%c”和i,1);
printf(“您选择了%c\n”,i);
}
的文档说明:
对于字符,单个字符可按如下方式读取:
char c;
scanf_s("%c", &c, 1);
因此,以下内容应该可以使用(请参阅现场演示)
#包括
内部主(空)
{
char i;
printf(“您想成为X的还是O的?\n”);
scanf_s(“%c”和i,1);
printf(“您选择了%c\n”,i);
}
您误用了scanf\u s()
。Microsoft编译器可能会警告您使用其安全扩展(又名c11附录k)。但是,如果你这样做,要小心scanf_s()
不能直接替代scanf()
在这种情况下,必须将输出缓冲区的大小作为额外参数传递
char c;
scanf_s("%c", &c, 1);
把1作为单个字符的大小可能有点迂腐。这是因为%c
可以读取任意数量的字符<代码>%c
只是%1c
的别名(单个字符)
通过了解缓冲区大小scanf_s()
旨在防止缓冲区溢出(安全风险)
尽管如此,这些功能到底有多大帮助仍有争议。请参阅:
:
与scanf和wscanf不同,scanf_和wscanf_需要缓冲区大小
为c、c、s、s或字符串类型的所有输入参数指定
包含在[]中的控件集。缓冲区大小(以字符为单位)为
作为指向的指针后面的附加参数传递
缓冲区或变量
对于字符,单个字符可按如下方式读取:
char c;
scanf_s("%c", &c, 1);
字符c
scanf_s(“%c”&c,1)
您误用了
scanf\u s()
。Microsoft编译器可能会警告您使用其安全扩展(又名c11附录k)。但是,如果你这样做,要小心scanf_s()
不能直接替代scanf()
在这种情况下,必须将输出缓冲区的大小作为额外参数传递
char c;
scanf_s("%c", &c, 1);
把1作为单个字符的大小可能有点迂腐。这是因为%c
可以读取任意数量的字符<代码>%c只是%1c
的别名(单个字符)
通过了解缓冲区大小scanf_s()
旨在防止缓冲区溢出(安全风险)
尽管如此,这些功能到底有多大帮助仍有争议。请参阅:
:
与scanf和wscanf不同,scanf_和wscanf_需要缓冲区大小
为c、c、s、s或字符串类型的所有输入参数指定
包含在[]中的控件集。缓冲区大小(以字符为单位)为
作为指向的指针后面的附加参数传递
缓冲区或变量
对于字符,单个字符可按如下方式读取:
char c;
scanf_s("%c", &c, 1);
字符c
scanf_s(“%c”&c,1)
您输入了什么?这似乎是windows特有的。在linux中使用scanf。为什么不按照
scanf_s
的文档进行操作?您输入了什么?这似乎是windows特有的。在linux中使用scanf。为什么不按照scanf\u s
的文档进行操作?