2016-12-21 3 views
-1

Verarbeitung CHAR Strings mit printf helfen Ich verwende softserial mit einem Bluetooth-Modem zu kommunizieren, und ich bin Strings an die serielle Schieben durch den folgenden Code:Benötigen

char bt_string = "test"; 
bluetooth_println(bt_string); 

Ich muss ersetzen können, die String mit

printf(" Error: cmd=%02hX, res=%02hX\n", CMD_SEND_CID, res); 

ich den folgenden Code

char bt_string; 
sprintf(bt_string, " Error: cmd=%02hX, res=%02hX\n", CMD_SEND_CID, res); 
bluetooth_println(bt_string); 

aber es funktioniert nicht für die Ausgabe eines versucht haben, etwas. Ich verstehe offensichtlich etwas falsch. Danke für jede Hilfe.

Antwort

4

Sie müssen einen Puffer für Ihre Zeichenfolge bereitstellen.

char bt_string[256]; // <-- or any size that you are sure will be enough for what you will put in. 

schließlich zur Sicherheit können Sie snpritf verwenden beliebigen Pufferüberlauf zu vermeiden:

#define MAX_BT_STRING 256 
char bt_string[MAX_BT_STRING]; 
snprintf(bt_string, MAX_BT_STRING," Error: cmd=%02hX, res=%02hX\n", CMD_SEND_CID, res); 
bluetooth_println(bt_string); 
+0

Vielen Dank. Immer etwas Einfaches. Works great – Eddie

1

char *str und char str[] sind deutlich unterschiedlich. Überprüfen Sie this question für weitere Details.

In Ihrem Problem haben Sie bt_string als const char *bt_string = "test" deklariert, wobei bt_string Zeiger ist, der auf das erste Zeichen in der Zeichenfolge "test" zeigt. Diese Zeichenfolge hat eine Größe von 5 Bytes (nicht den Terminator \ 0 vergessen);

Im nächsten Schritt:

sprintf(bt_string, " Error: cmd=%02hX, res=%02hX\n", CMD_SEND_CID, res); 

Sie Dump mehr als 5 Bytes bt_string die nur 5 Byte Speicherplatz zur Verfügung steht. Die Teile jenseits von 5 Bytes überschreiben den Inhalt nach bt_string, was zu einer ernsten Situation oder gar nichts führen kann, es hängt davon ab, was gefolgt wird.

dieses Problem zu lösen, Sie genügend Speicherplatz zuweisen müssen:

  1. auf Stapel zuweisen als A.S.H beantwortet. Der Inhalt wird nach Beendigung der Funktion bestimmt.
  2. über malloc zuweisen;
  3. Verwenden Sie statisches Schlüsselwort, um die im BSS-Abschnitt oder im DATA-Abschnitt gespeicherte Zeichenfolge zu erzwingen.
+0

danke für das zu sehen. Es war ein Tippfehler bei der Eingabe der Frage. – Eddie