String zusammenbauen mit sprintf und Structs - ESP8266 C

OP #4730614
Lesenswert?

Guten Tag,

auf meinem Controller versuche ich aktuell, einen String 
zusammenzubauen. Dafür benutze ich die Funktion sprintf. Das ganze 
sieht aktuell so aus:
1
#define DOMAIN "www.google.de"
2

3
typedef struct {
4
    char* Type;
5
    char* ID;
6
}object;
7

8
uint16 getADCValue(){
9
    return system_adc_read();
10
}
11

12
void main(){
13
    char requestText[SIZE];
14
    int n;
15
    for(n = 0; n < MAX_REQUESTS; n++){
16
        os_sprintf(requestText,"GET /SQL.php?request=enterTemp&reqid=%s&value=%d /HTTP/1.1\r\nUser-Agent: curl/7.37.0\r\nHost: %s\r\nAccept: */*\r\n\r\n",requests[n].ID,getADCValue(),DOMAIN);
17
    }
18
}

Das Ergebnis, dass der ESP8266 auf der Konsole ausgibt, sieht allerdings 
so aus (gekürzt):
1
GET /SQL.php?request=enterTemp&reqid=request=enterTemp&reqid=&value=756 /HTTP/1.1

Erwarten würde ich so etwas (gekürzt):
1
GET /SQL.php?request=enterTemp&reqid=6&value=251 /HTTP/1.1

Wenn ich requests[n].ID durch "6" ersetze, klappts wunderbar. Warum hat 
sprintf ein Problem mit Structs?
#4730776
Lesenswert?

Max M. schrieb:
> Warum hat
> sprintf ein Problem mit Structs?

sprintf bekommt gar nicht mit, dass da eine struct beteiligt ist.
Das wird vor dem Aufruf von sprintf durch den Compiler erledigt.

Das Problem liegt also woanders.

Erweitere dein BEispiel von oben so, dass es compilierbar ist.
Dann kannst du sehen ob der Fehler noch drin ist. Wenn ja, dann poste 
ddieses Minimalbeispiel, wenn nicht liegt es in einem anderen Bereich.

Bufferoverflow, Stack zu klein, wilder Zeiger, ...

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