Forum: Compiler & IDEs Variable aus char-Array in int


von Sonja (Gast)


Lesenswert?

Hallo,

ich habe ein Char-Array, dass wie folgt aufgebaut ist:

Test[20]="Var:00023blabla";

Wie kann ich nun den Zahlenwert, der immer an stelle
Test[4]-Test[9] steht in eine int-Variable abspeichern??

von DirkB (Gast)


Lesenswert?

Solange blabla Text ist:
1
intvariable = (int)strtol(Test+4,NULL,10);
2
//oder
3
intvariable = atoi(Test+4);

von Sonja (Gast)


Lesenswert?

Danke, und wenn in blabla auch Zahlen sein können??

von Holger J. (Gast)


Lesenswert?

Dann hilft evtl.

intvariable = (int)strtol(Test+4,Test+8,10);

die 8 bezieht sich auf das gegebene Beispiel, und nicht auf die Aussage, 
"..der immer an stelle Test[4]-Test[9] steht.."

von Holger J. (Gast)


Lesenswert?

halt nee, ist Käse, was ich schrieb. Da kommt als zweites Argument ja 
ein Doppelpointer rein, der laut Manpage von strtol nur "endptr" heißt.

von DirkB (Gast)


Lesenswert?

strtol und atoi brechen beim ersten Zeichen, das nicht zu einer Ganzzahl 
passt, ab.
Bei sscanf kann man die Anzahl der Zeichen begrenzen:
sscanf(Test+4,"%5d", &intvariable );

oder wenn du Test nicht mehr brauchst, kannst du vorher auch Test[9] = 
'\0'; schreiben (da ist der String dann zu Ende).

@Holger
Das geht so nicht!
strtol erwartet als zweiten Parameter ein char** oder NULL.
Der zeigt an, an welcher Stelle strtol nicht mehr weiterkommt.

von Holger J. (Gast)


Lesenswert?

Eine Lösung wäre,

Test[10] = 0;

bevor Du strtol anwendest. Falls Test nicht verändert werden soll vorher 
in ein temporäres Array kopieren und die Aktion darauf anwenden.

von Holger J. (Gast)


Lesenswert?

@DirkB
Yep, hatte etwas schnell die Manpage überflogen. Sorry!

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.