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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.