C语言scanf读取单个字符出错

{
char a;
scanf_s("%c", &a);
printf("%c", a);
}
编译报warning:
警告 C4477 'scanf_s' : format string '%d' requires an argument of type 'int *', but variadic argument 1 has type 'char *'

并且得不到正确的结果。

使用getchar()没有问题,求问scanf的用法到底是怎样

谢了

6个回答

需要一个参数指定缓冲区长度,
例如:char name;
scanf_s("%s", name, sizeof(name));

joy2008yh
_eternityh 明白了,谢谢~
接近 5 年之前 回复

改成scanf("%c", &a);就OK了

joy2008yh
_eternityh scanf报Error,说此函数不安全,要求用scanf_s代替,IDE是VS2015
接近 5 年之前 回复

int _tmain(int argc, _TCHAR* argv[])
{

    char a;
    scanf_s("%c",&a,sizeof(char));
    printf("%c\n",a);
    getchar();
return 0;

}

微软把这函数的用法改的越来越蛋疼了,

微软平台的 所谓安全的scanf_s

scanf_s最后一个参数是缓冲区的大小,表示最多读取n-1个字符.

vc++2005/2008中提供了scanf_s(),在最新的VS2015中也提供了scanf_s()。在调用时,必须提供一个数字以表明最多读取多少位字符。

例子如下:

int i, result;

float fp; char c, s[81];

wchar_t wc, ws[81];

result = scanf_s( "%d %f %c %C %s %S", &i, &fp, &c, 1, &wc, 1, s, 80, ws, 80 );

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐