如何删除char数组转换为unsigned char数组的警告

您好,我在Linux平台下的C下面的代码

#include <stdio.h> #include <string.h> int main(void) { unsigned char client_id[8]; char id[17] = "00000001"; sscanf(id,"%02X%02X%02X%02X", &client_id[0], &client_id[1], &client_id[2], &client_id[3]); printf("%02X%02X%02X%02X", client_id[0], client_id[1], client_id[2], client_id[3]); } 

当我运行这个代码,我得到的输出

 00000001 

但有以下警告

 > test.c: In function 'main': test.c:7:1: warning: format '%X' expects > argument of type 'unsigned int *', but argument 3 has type 'unsigned > char *' [-Wformat=] > sscanf(id,"%02X%02X%02X%02X",&client_id[0],&client_id[1],&client_id[2],&client_id[3]); > ^ test.c:7:1: warning: format '%X' expects argument of type 'unsigned > int *', but argument 4 has type 'unsigned char *' [-Wformat=] > test.c:7:1: warning: format '%X' expects argument of type 'unsigned > int *', but argument 5 has type 'unsigned char *' [-Wformat=] > test.c:7:1: warning: format '%X' expects argument of type 'unsigned > int *', but argument 6 has type 'unsigned char *' [-Wformat=] 

警告是显而易见的,但我怎么能删除它们?

我不想用

-Wno指针-SIGN

我应该使用sprintf还是sscanf任何更改?

你需要告诉sscanf参数是一个char类型。 这是通过在X格式说明符之前加上hh修饰符来完成的:

 sscanf(id,"%02hhX%02hhX%02hhX%02hhX",&client_id[0],&client_id[1],&client_id[2],&client_id[3]);