Forum: PC-Programmierung String zusammenbauen mit sprintf und Structs - ESP8266 C


von Max M. (maxmicr)


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?

: Bearbeitet durch User
von Peter II (Gast)


Lesenswert?

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

hat es nicht.

aber %d und char* passt halt nicht zusammen.

von Dirk B. (dirkb2)


Lesenswert?

struct falsch gefüllt

von Max M. (maxmicr)


Lesenswert?

Peter II schrieb:
> Max M. schrieb:
>> . Warum hat
>> sprintf ein Problem mit Structs?
>
> hat es nicht.
>
> aber %d und char* passt halt nicht zusammen.

Das *%d* ist für den ADC-Wert.

Dirk B. schrieb:
> struct falsch gefüllt

Wenn ich mir den Wert auf der Konsole ausgeben lasse:
1
os_printf("New Command found with ID:%s.\n", requests[n].ID);

Funktioniert es einwandfrei.

von Peter II (Gast)


Lesenswert?

Max M. schrieb:
> Das *%d* ist für den ADC-Wert.

oh, sorry.

Dann wird es wohl so sein wie Dirk B. schreibt. In der Struct steht 
nichts sinnvolles drin.

von Max M. (maxmicr)


Lesenswert?

Peter II schrieb:
> Dann wird es wohl so sein wie Dirk B. schreibt. In der Struct steht
> nichts sinnvolles drin.

Siehe mein letzter Post.

von Dirk B. (dirkb2)


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, ...

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.