Forum: Mikrocontroller und Digitale Elektronik Falsche Typumwandlung? Einsteigerfrage


von Alexander M. (a_lexander)


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 ;)

: Bearbeitet durch User
von Michael D. (nospam2000)


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

von Jim M. (turboj)


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.

von Alexander M. (a_lexander)


Angehängte Dateien:

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 :)

: Bearbeitet durch User
von Alexander M. (a_lexander)


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 ;)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.