mikrocontroller.net

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


Autor: Max M. (maxmicr)
Datum:

Bewertung
0 lesenswert
nicht 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:
#define DOMAIN "www.google.de"

typedef struct {
    char* Type;
    char* ID;
}object;

uint16 getADCValue(){
    return system_adc_read();
}

void main(){
    char requestText[SIZE];
    int n;
    for(n = 0; n < MAX_REQUESTS; n++){
        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);
    }
}

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

Erwarten würde ich so etwas (gekürzt):
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
Autor: Peter II (Gast)
Datum:

Bewertung
-2 lesenswert
nicht lesenswert
Max M. schrieb:
> . Warum hat
> sprintf ein Problem mit Structs?

hat es nicht.

aber %d und char* passt halt nicht zusammen.

Autor: Dirk B. (dirkb2)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
struct falsch gefüllt

Autor: Max M. (maxmicr)
Datum:

Bewertung
0 lesenswert
nicht 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:
os_printf("New Command found with ID:%s.\n", requests[n].ID);

Funktioniert es einwandfrei.

Autor: Peter II (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Max M. (maxmicr)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Dirk B. (dirkb2)
Datum:

Bewertung
1 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.