Falsche Typumwandlung? Einsteigerfrage

OP #6073175
Lesenswert?

Hallo Zusammen.

Ich wäre dankbar um eure Hilfe, ich kann ehrlich gesagt die 
Fehlermeldung nicht richtig deuten und bin deshalb immer mehr am 
Verzweifeln...

Ich hab einen ESP32 und würde gern die MAC-Adresse meiner SSID anhängen, 
dazu habe ich mir folgenden Code gedacht:
1
uint8_t mac_adress[6] = { 0 };
2
char example_ssid[32] = { 0 };
3

4
esp_efuse_mac_get_default(mac_adress);
5
sprintf(example_ssid, EXAMPLE_ESP_WIFI_SSID"-%02X-%02X-%02X", mac_adress[3], mac_adress[4], mac_adress[5]);
6

7
  wifi_config_t wifi_config = {
8
        .ap = {
9
            .ssid = example_ssid,
10
            .ssid_len = strlen(example_ssid),
11
            .password = EXAMPLE_ESP_WIFI_PASS,
12
            .max_connection = EXAMPLE_MAX_STA_CONN,
13
            .authmode = WIFI_AUTH_WPA_WPA2_PSK
14
        },
15
    };
Folgende Warning / Fehlermeldung bekomme ich dann aber:

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

note: (near initialization for 'wifi_config.ap.ssid[0]')

error: missing braces around initializer [-Werror=missing-braces]
     wifi_config_t wifi_config = {
                                 ^

Vielleicht kann mir jemand helfen und will mir die Fehlermeldung 
erklären...

Danke ;)
#6073221
Lesenswert?

Alexander M. schrieb:
> warning: initialization of 'unsigned char' from 'char *' makes integer
> from pointer without a cast [-Wint-conversion]

Ich nehme an die Fehlermeldung gehört zu Zeile 336?

Mal ernsthaft, die Fehlemeldungen beinhalten normalerweise Zeilenummern 
und der Sourcecode auch. Wenn man diesen Bezug wie in deinem Posting 
entfernt, dann wird es unmöglich dir zu helfen, außer man bringt dies 
selbst wieder in eine übersetzbare Form.

Wenn du solche eine Frage beantwortet haben willst, dann schreibe sie 
bitte mit einem vollständigen (d.h. potentiell übersetzbaren) Code.
Falls es dann Fehlermeldungen gibt, dann poste bitte auch die 
Zeilennummern.

  Michael
#6073233
Lesenswert?

Zur Lösung muss man die Typdefinition kennen:
1
typedef struct {
2
      char ssid[32];              
3
     char password[64];          
4
  // [... gekürzt ... ]
5
   } wifi_ap_config_t;


Man kann in C kein char[] Feld in einer Struktur mit einer anderen 
char[] Variablen initialisieren. Das muss man stattdessen zwingend mit 
strcpy() oder memcpy() im Code tun.
OP #6073250
Lesenswert?

Klar, mein Fehler...

Es handelt sich um das Example "softAP" der esp-idf:

https://github.com/espressif/esp-idf/blob/master/examples/wifi/getting_started/softAP/main/softap_example_main.c

Bearbeiteter Code im Anhang...(Bearbeitete Funktion: wifi_init_softap, 
Zeile 56: uint8_t mac_adress[6] = { 0 } ).

C:/msys32/home/max.mustermann/esp/softAP/main/softap_example_main.c: In 
function 'wifi_init_softap':
C:/msys32/home/max.mustermann/esp/softAP/main/softap_example_main.c:64:2 
1:  warning: initialization of 'unsigned char' from 'char *' makes 
integer from pointer without a cast [-Wint-conversion]
             .ssid = example_ssid,
                     ^~~~~~~~~~~~
C:/msys32/home/max.mustermann/esp/softAP/main/softap_example_main.c:64:2 
1:  note: (near initialization for 'wifi_config.ap.ssid[0]')
C:/msys32/home/max.mustermann/esp/softAP/main/softap_example_main.c:62:3 
3:  error: missing braces around initializer [-Werror=missing-braces]
     wifi_config_t wifi_config = {
                                 ^
C:/msys32/home/max.mustermann/esp/softAP/main/softap_example_main.c:64:2 
1:
             .ssid = example_ssid,
                     {           }
C:/msys32/home/max.mustermann/esp/softAP/main/softap_example_main.c:62:3 
3:  error: missing braces around initializer [-Werror=missing-braces]
     wifi_config_t wifi_config = {
                                 ^
C:/msys32/home/max.mustermann/esp/softAP/main/softap_example_main.c:64:2 
1:
             .ssid = example_ssid,
                     {           }
cc1.exe: some warnings being treated as errors

Danke :)
Angehängte Dateien:
OP #6073257
Lesenswert?

Jim M. schrieb:
> Zur Lösung muss man die Typdefinition kennen:
>
>
1
> 
2
> typedef struct {
3
>       char ssid[32];
4
>      char password[64];
5
>   // [... gekürzt ... ]
6
>    } wifi_ap_config_t;
7
>
>
>
> Man kann in C kein char[] Feld in einer Struktur mit einer anderen
> char[] Variablen initialisieren. Das muss man stattdessen zwingend mit
> strcpy() oder memcpy() im Code tun.

Oh man... na klar, Danke ;)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren