[solved] Formatumwandelung einer Variable
-
Hallo,
ich habe zwei Variablen:
char *statustable = ".1.3.6.1.4.1.1588.2.1.1.1.6.2.1.3."; int portnumber = 0;
Dieser Variablen muss ich nun als String verketten,
so das es folgendes ergibt:
.1.3.6.1.4.1.1588.2.1.1.1.6.2.1.3.0
(SNMP OID)
leider gibt folgendes einen Segmentation Fehler:strcat(statustable, (char *)portnumber);
Wie stelle ich das sonst an?
thx vicodas
-
sprintf benutzen.
-
Erstens: Du mußt den Inhalt von portnumber noch in einen String umwandeln (z.B. per sprintf()).
Zweitens: String-Literale liegen idR im Read-Only-Sektor des Programms, da kannst du zur Laufzeit nichts reinkopieren. Nimm lieber ein (ausreichend großes) char-Array.
-
danke für die schnellen Antworten.
Aber leider habe ich mit dem sprintf ein Problem:char *tmpstatustable = ".1.3.6.1.4.1.1588.2.1.1.1.6.2.1.3."; char *statustable = "0"; int portnumber = 1; sprintf(statustable, "%c%d", tmpstatustable, portnumber);
Bringt mir einen Fehler für die sprintf Zeile:
warning: int format, pointer arg (arg 3)
-
Erstens: Die Formatkennung für Zeichenketten ist %s (wie String).
(btw, welcher Compiler ist tatsächlich so nett, die printf()-Formate für dich zu überprüfen?)Zweitens: Du hast immer noch nicht genug Speicher bereitgestellt, um die Daten dort reinzuschreiben -
char* statustable = "0";
verweist auf einen Speicherbereich, der (a) gerade mal 2 Byte groß ist und (b) im Read-Only-Sektor des Programms (String-Literal) liegt. Mit viel Glück wird dir das Programm zur Laufzeit gnadenlos abstürzen (im schlimmsten Fall funktioniert das tatsächlich und zerlegt dir als Nebeneffekt dein Programm).
-
char array, nicht zeiger auf string
-
ich sehe da ist noch einiges zu erlernen...
thx vicodas
-
Hi, das Zauberwort ist ja schon mehrmals gefallen:
char array, alias Puffer.
Du brauchst nen Puffer, der groß genug für deine einzelnen Komponenten ist, nennen wir den mal cPuffer.
Dann musst du festlegen, wie groß der Puffer maximal sein soll, wenn du nicht mit malloc hantieren willst.
Z.B.
#define MAXLEN 256
MAXLEN ist also stellvertretend für deine maximale Puffergröße in Byte.
Deine Einzelteile ( statustable, etc.. ) dürfen also inklusive der Leerzeichen usw. zusammen nicht länger als 256 Byte werden.
Wenn du nun char cPuffer[MAXLEN] schreibst, hast du also nen 256 Byte großen Puffer.
So und da kannst du mit dem freundlichen sprintf(...) deine Teile reinpacken.
Achte dabei auf die Formatierungszeichen, denn z.B. mit %c packst du da nur ein Byte rein, was du wohl s.o. nicht unbedingt wolltest. Guck dir am besten mal ein C Buch an, oder Beispiele im Internet.
Konkret könnte deine Lösung so aussehen:#define MAXLEN 256 int main() { char cPuffer[MAXLEN]; char *tmpstatustable = ".1.3.6.1.4.1.1588.2.1.1.1.6.2.1.3."; char *statustable = "0"; int portnumber = 1; sprintf( cPuffer, "%s %s %i", tmpstatustable, statustable, portnumber ); puts(cPuffer ); }
Gruuhuuß,
p.
-
CStoll schrieb:
(btw, welcher Compiler ist tatsächlich so nett, die printf()-Formate für dich zu überprüfen?)
Zumindest der gcc macht das.