user3145350
user3145350

Reputation: 93

How to remove warning for conversion in char array to unsigned char array

Hi i have the following code in c under Linux platform

#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]);
}

When I run this code I get the output

00000001

but with following warning

> 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=]

The warnings are but obvious but how can I remove them?

I do not want to use

-Wno-pointer-sign

Should I use sprintf or any changes in sscanf?

Upvotes: 2

Views: 590

Answers (1)

dbush
dbush

Reputation: 223927

You need to tell sscanf that the arguments are of a char type. This is done by putting the hh modifier before the X format specifier:

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

Upvotes: 3

Related Questions