Forum: PC-Programmierung #define unter GCC


von Raptor (Gast)


Lesenswert?

Hallo,

ich habe folgenden Code geschrieben:
1
#define MYSQL_TABLE                     "temperatur"
2
#define MYSQL_COL2                      "wert"
3
4
sprintf( mysql_buffer, "INSERT INTO `MYSQL_TABLE` (MYSQL_COL2) VALUES('%s')", com_buffer);
Leider werden die beiden Zeichenketten nicht ersetzt.

Was muss ich ändern, damit die Strings ersetzt werden?

Gruß

von D. I. (Gast)


Lesenswert?

sprintf( mysql_buffer, "INSERT INTO `%s` (%s) VALUES('%s')", 
MYSQL_TABLE, MYSQL_COL2, com_buffer);

von AND (Gast)


Lesenswert?

Besser:

sprintf( mysql_buffer, "INSERT INTO `" MYSQL_TABLE "` (" MYSQL_COL2 
")VALUES('%s')", com_buffer);

von Christian F. (cmf) Benutzerseite


Lesenswert?

Der Präprozessor ersetzt nicht in Strings.

von imon (Gast)


Lesenswert?

AND schrieb:
> Besser:
>
> sprintf( mysql_buffer, "INSERT INTO `" MYSQL_TABLE "` (" MYSQL_COL2
> ")VALUES('%s')", com_buffer);

noch besser:
1
 ret  = snprintf( mysql_buffer, mysql_buffer_len, "INSERT INTO `"  
2
                  MYSQL_TABLE "` (" MYSQL_COL2 ")VALUES('%s')", com_buffer);
3
 if ( ret == mysql_buffer_len ) {
4
      printf("com_buffer to lage for mysql_buffer\n");
5
      /* exit , abort , return value for error, whatever */
6
 }

von Sven P. (Gast)


Lesenswert?

Noch noch viel besser:

Statt die Anfrage mit sprintf() zusammenzubauen, gleich vorbereitete 
Abfragen benutzen. Damit erübrigt sich dann auch wilde Maskiererei bei 
String-Feldern.

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.