Probleme mit char
-
Also ich möchte ein char "123/456" in 123 zerlegen. Also nur die ersten 3 Stellen des chars haben.
char ist definiert:
char * s= new char[size];Dabei habe ich versucht die Elemente des chars einzeln anzusprechen:
char * tmp= new char[3]; tmp[0] = s[0]; tmp[1] = s[1]; tmp[2] = s[2];tmp ist dann aber 7 Stellen gross und mit 123yyyy aufgefüllt.
Dann habe ich versucht das char in einen std::string umzuwandeln, um substring anwenden zu können.
char test[7]; // Text nach char Array kopieren strcpy(test, "s"); // C++ String deklarieren std::string str; // char Array dem String zuweisen str = test;liefert in VC 6.0 Fehler
ebenso:std::string a( "test1" ); CString b( "test2" ); // CString -> std::string a = LPCTSTR( b );Kann mir jemand helfen? Hab keine Idee mehr..
vielen Dank.
-
char* s = "123/456"; char tmp[4]; // 3 Zeichen + Terminator; strncpy(tmp, s, 3);
-
Erstmal geht es hier nicht um char (einzelne Zeichen), sondern um char-Arrays (Zeichenketten) - es ist interessant, wie oft das durcheinandergeworfen wird.
Zweitens arbeitet C (und die char*-Routinen in C++) mit sog. "nullterminierten Strings", d.h. das Ende einer Zeichenkette wird durch ein '\0' gekennzeichnet. Du hast dieses Endezeichen weggelassen, deshalb liest C++ hinter dem von dir reservierten Bereich weiter, bis zufällig eine 0 im Speicher kommt.
Drittens: Sollen wir jetzt raten, was für Fehler dein Compiler ausspuckt?
-
char-Arrays müssen mit einem \0 abgeschlossen werden. Dieses benötigt ebenfalls einen Speicherplatz. Wenn Du also 3 Zeichen benötigst, muß die char-Array-Größe 4 sein:
Es fehlt dann also nur:tmp[3] = 0;[EDIT] Da hab ich wohl viel zu langsam getippt...

-
<---> schrieb:
char * tmp= new char[3]; tmp[0] = s[0]; tmp[1] = s[1]; tmp[2] = s[2];tmp ist dann aber 7 Stellen gross und mit 123yyyy aufgefüllt.
Du hast die Nullterminierung vergessen:
char* tmp = new char[4]; // ... tmp[3] = '\0';... aber so macht man das in C++ nicht. 'std::string' ist schon die korrekte Lösung. Wenn bei Dir ein Fehler kommt, wäre es interessant, die Fehlermeldung zu kennen, sonst kann man Dir nicht helfen. Ich vermute mal, Du hast vergessen, den Header <string> einzubinden.
#include <string> #include <iostream> int main() { std::string test = "123/456"; std::string x123 = test.substr(0, 3); std::cout << x123 << std::endl; }
-
Eine andere Möglichkeit wäre:
const char *fnord = "123/456"; std::string fubar(fnord, fnord + 3); // fubar == "123"
-
danke!
Das fehlende 0 Zeichen wars.
Bei den Varianten, die Fehler lieferenten vermutlich auch. Denn ich habe dort auch mit 3 Zeichen initialisiert. Ich habe dort keine Fehlermeldung bekommen, sondern das Programm ist zur Laufzeit abgestürzt.
Jetzt gehts.