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的用法到底是怎样

谢了

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

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

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

}

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

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

微软平台的 所谓安全的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 );