想要删除警告而不将data-type更改为char

时间:2017-03-15 06:42:56

标签: c scanf compiler-warnings

我想删除没有更改数据类型的警告到char。

#include<stdio.h>
#include<stdlib.h>
main()
{
    unsigned char ch;
    printf("Hello This is Problematic\n");
    scanf("%d",&ch);
    printf("1\n");
}

这会生成警告

  

test.c:7:2:警告:格式'%d'需要类型'int *'的参数,但参数2的类型为'unsigned char *'[-Wformat =] scanf(&#34;%d& #34;,&安培; CH);

1 个答案:

答案 0 :(得分:2)

实际上,

scanf("%d",&ch);

将程序保留为undefined behavior,因为提供的参数不是转换说明符的正确类型。你需要写

scanf("%hhu",&ch);

引用C11,章节§7.21.6.2

  

hh

     

指定以下diouxXn转换说明符适用   带有signed charunsigned char的类型指针的参数。