Search code examples
arrayscstructinitialization

warning: initialization of 'unsigned char' from 'uint8_t *' {aka 'unsigned char *'} makes integer from pointer without a cast [-Wint-conversion]


Actually there's no error. Code is working fine, but that warning is annoying me.

lib/uwc_event/wifi_event.c: In function 'uwc_wifi_init_sta':
lib/uwc_event/wifi_event.c:33:24: warning: initialization of 'unsigned char' from 'uint8_t *' {aka 'unsigned char *'} makes integer from pointer without a cast [-Wint-conversion]
               .ssid = {(uint8_t *)&WIFI_SSID[0]},
                        ^
lib/uwc_event/wifi_event.c:33:24: note: (near initialization for 'wifi_config.sta.ssid[0]')
lib/uwc_event/wifi_event.c:34:28: warning: initialization of 'unsigned char' from 'uint8_t *' {aka 'unsigned char *'} makes integer from pointer without a cast [-Wint-conversion]
               .password = {(uint8_t *)&WIFI_PASW[0]},
                            ^
lib/uwc_event/wifi_event.c:34:28: note: (near initialization for 'wifi_config.sta.password[0]')

And this is the part code where warning show:

wifi_config_t wifi_config = {
      .sta =
          {
              .ssid = {(uint8_t *)&WIFI_SSID[0]},
              .password = {(uint8_t *)&WIFI_PASW[0]},
              .threshold.authmode = WIFI_AUTH,
          },
  };

Where .ssid is declared (I'm not sure, see: (https://github.com/espressif/esp-idf/blob/master/components/esp_wifi/include/esp_wifi_types.h)) with:

typedef struct {
    uint8_t ssid[32];
    uint8_t password[64];

// another code...

WIFI_SSID and WIFI_PASW are declared by myself with:

extern char WIFI_SSID[32];
extern char WIFI_PASW[32];

So how do I remove those warning? What makes that warning happen?


Solution

  • ssid and password are arrays so you are trying to initialize the (rhs) address into the first element of an array. Instead you want to copy the data with for example strcpy():

    strcpy(wifi_config.sta.ssid, WIFI_SSID);
    strcpy(wifi_config.sta.password, WIFI_PASW);