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??
Solange blabla Text ist:
1 | intvariable = (int)strtol(Test+4,NULL,10); |
2 | //oder
|
3 | intvariable = atoi(Test+4); |
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.."
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.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.