char [1] in char[2] konvertieren?
-
Hi,
ich habe ein ein string mit einer bestimmten Laenge, jedoch sagt mir der Komplier, wenn ich der Inhalt nciht die exakte Laenge besitzt, dass er es nciht konvertieren kann. Inhalt ist auch kleiner als der reservierte Datenblock. Das Problem liegt denke ich darin, dass es sich um ein Member eines Objects handelt. Es ist public & wurde direkt beschrieben. Gibt es eine Moeglichkeit, wie ich mit wenig aufwand den fehler richten kann?Danke im Vorraus, bye
-
Code? Fehlermeldungen?
Ich denke nicht, dass es sich um ein Problem eines Objekt-Members handelt.
Ich schätze mal, du hast den char mit doppelten Anführungszeichen initialisiert. Zum Beispiel so:
char aChar = "a";Die doppelten Anführungszeichen werden als String interpretiert, deswegen wird versucht ein '\0' einzufügen. Das wären dann zwei Byte.
Mangels Code, Fehlermeldungen und Kristallkugel rate ich dir mal ins Blaue hinaus deinen Char mit '' zu initialisieren:
char aChar = 'a';
-
Nein, also es handelt sich schon um strings. Hatte nur 1 & 2 als beispiel gewaehlt. Anders zB ein 100 Zeichenlanger string wird einer 20 zeichenlangen Kette zugewiesen.
-
Um ein String-Literal aufnehmen zu können, mußt du natürlicherweise genug Platz zur Verfügung stellen, um alle Zeichen (inklusive \0) unterzubringen):
//falsch: zu wenig Platz char text[5] = "Programm"; //richtig: //Platz automatisch berechnen: char text[] = "Programm"; //ausreichend Platz anbieten: char text[10] = "Programm"; //Pointer verwenden: char*text = "Programm";(die letzte Version lagert das String-Literal in einem gesonderten Datensegment und verwaltet nur einen Zeiger darauf)
-
ich weiß garnet wo das Problem sein soll?! Wobei es schon merkwürdig ist was du da machst

-
Wenn es sich um eine gewoehnlcihe Variable handelt, dann ensteht ja auch kein Problem. Nur wenn es sich um ein Member eines Objekts handelt, DANN tritt der Fehler auf.
ALternativ dazu hab ich jetzt einen char pointer angelegt, was soweit klappt. Allerdings tritt bei printf dann wieder einanderer Fehler auf, den ich durch ein char array vermeiden wollte. HILFE!!!
-
Nochmal: Wenn du uns deinen Code und die Fehlermeldungen nicht zeigst, dann können wir dir auch nicht weiterhelfen!
-
Hier nun der Quellcode 1:1, wie ich ihn kompiliert habe, & die Fehler Meldung bekommen habe.
#include <windows.h> LRESULT CALLBACK MessageHandler(HWND hWndMain, UINT msg, WPARAM wparam, LPARAM lparam); HWND hWndMain = 0; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { WNDCLASSEX wndClassMain; wndClassMain.cbSize = sizeof(WNDCLASSEX); wndClassMain.style = CS_DBLCLKS | CS_OWNDC; //CS_HREDRAW | CS_VREDRAW; wndClassMain.lpfnWndProc = MessageHandler; wndClassMain.cbClsExtra = 0; wndClassMain.cbWndExtra = 0; wndClassMain.hInstance = hInstance; wndClassMain.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wndClassMain.hCursor = LoadCursor(NULL, IDC_ARROW); wndClassMain.lpszMenuName = NULL; wndClassMain.lpszClassName = "WindowClass"; wndClassMain.hIcon = LoadIcon(NULL, IDI_WINLOGO); wndClassMain.hIconSm = LoadIcon(NULL, IDI_WINLOGO); RegisterClassEx(&wndClassMain); hWndMain=CreateWindowExNULL,"WindowClass","Test", WS_OVERLAPPEDWINDOW | WS_VISIBLE | WS_MAXIMIZE , 0, 0, 0, 0, NULL, NULL, hInstance, NULL); // FEHLERZONE char Test[20]; Test ="Test"; MSG msg; while(GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return 0; } LRESULT CALLBACK MessageHandler(HWND hWndMain, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { case WM_DESTROY: PostQuitMessage(0); return 0; break; } return (DefWindowProc(hWndMain, msg, wParam, lParam)); }& zu guter letzt die besagte Fehlermeldung:
error C2440: '=' : 'char [5]' kann nicht in 'char [20]' konvertiert werden
Entweder ich man hat ueber Nacht die Regeln der Mathematik veraedert, & die 5 ist jetzt groesser als die 20, ich hab etwas uebersehen, oder mein COmpiler ist einfach kaputt. Aber ich schliesse die ersten zwei DInge mal aus. Was sagt ihr?
-
Ich muss mich nochmal korregieren, bezuweglich der Sache mit den Objekten. Denn da hab ich mich geirrt, das Problem tritt auch bei einer ganz gewoehnlichen Variable auf.
-
Naja, char* oder char[] kannste nicht einfach so kopieren.
Das macht man mit strncpy.char pio[5]; char text[] = "Guten Tag der Herr"; memset(pio, 0, 5); strncpy(pio, text, 4); ASSERT(pio == "Gute");
-
Gibt es eine Moeglichkeit, wie man fuer die FUnktion Printf die Groesse eines Stringblocks ueber einen string zeiger raus finden kann? Dann haette sich die sache auch von selbst geklaert.