String nach char konvertieren



  • Hallo zusammen,

    ich habe einen String und möchte diesen nach char konvertieren:

    string string_lX;
    char read_buffer[10] = {' '};
    

    Hat jemand eine Idee?

    Grüße

    datatom



  • Ja, sogar zwei: std::string::c_str() oder std::string::copy()



  • CStoll schrieb:

    Ja, sogar zwei: std::string::c_str() oder std::string::copy()

    Habe die zweite Variante versucht:

    int laenge_string = string_lX.length();
    	size_t length;
    	char char_lX[20] = {' '};
    	length=string_lX.copy(char_lX,0,laenge_string);
    	char_lX[length]='\0';
    

    Klappt aber nicht. Char bleibt leer. Was habe ich falsch gemacht?



  • Erstens: steht in dem String, den du dort kopieren willst, denn überhaupt etwas drin? Wenn nicht, ist der Rest reichlich sinnlos.
    (in deinem Eröffnungsbeitrag ist string_IX leer und in readbuffer steht ein einsames Leerzeichen)

    Zweitens: copy() solltest du nicht die Größe des Quellstrings übergeben (die kennt er selber), sondern die Größe des char-Arrays, das du als Ziel verwendest (bei Bedarf abzüglich des später ergänzten Null-Terminators).



  • Habe das jetzt so probiert:

    size_t length;
    	char char_lX[10] = {' '};
    	length=string_lX.copy(char_lX,0,5);
    	char_lX[length]='\0';
    

    Der char bleibt trotzdem leer:-(

    Der String ist mit folgendem Wert gefüllt (so stehts im Debugger 😉 ): 14354



  • Ich glaube, ich hab' den Fehler in deinem Code entdeckt - der Zweite Parameter von copy() gibt die Größe des Zielbereichs an (und damit die Anzahl der zu kopierenden Zeichen), der dritte die Startposition im String, wo du mit dem Kopieren anfangen willst - du hast diese Parameter vertauscht.



  • Warum brauchst du das eigentlich? Wenn du eine Funktion aufrufst, die einen const char* entgegen nimmt, solltest du auf jeden Fall c_str() verwenden.
    Und wenn du evtl. einzelne Buchstaben verändern möchtest, geht das mit einem string genau so wie mit einem char-Array.
    Und die dritte Möglichkeit wäre, dass du den Originalstring behalten, eine Kopie verändern und diese an einen Funktion übergeben möchtest. In diesem Fall kannst du den Originalstring einem anderen String zuweisen, diesen verändern und mit ihm weiter arbeiten.
    In jedem Fall solltest du deine Lösung (edit: bzw. Lösungsansatz) noch einmal überdenken.



  • [quote="CStoll"]Ich glaube, ich hab' den Fehler in deinem Code entdeckt - der Zweite Parameter von copy() gibt die Größe des Zielbereichs an (und damit die Anzahl der zu kopierenden Zeichen), der dritte die Startposition im String, wo du mit dem Kopieren anfangen willst - du hast diese Parameter vertauscht.[/quote

    Thank you;-)

    Habe das jetzt so gemacht und es klappt:

    size_t length;
    	char char_lX[8] = {' '};
    	length=string_lX.copy(char_lX,laenge_string,0);
    	char_lX[length]='\0';
    


  • Wenn du nicht gerade eine Funktion aus einer C-Library hast, die einen char* als Output-Parameter erwartet, gibt es bestimmt eine bessere Lösung. Was hast du vor?



  • Ich muss die WriteFile-Funktion

    BOOL WINAPI WriteFile(
      __in         HANDLE hFile,
      __in         LPCVOID lpBuffer,
      __in         DWORD nNumberOfBytesToWrite,
      __out_opt    LPDWORD lpNumberOfBytesWritten,
      __inout_opt  LPOVERLAPPED lpOverlapped
    );
    

    verwenden und dazu brauche ich den char. Oder sehe ich das falsch?



  • Also für die Funktion benötigst du nur einen konstanten Zeiger und dafür reicht der Rückgabewert von c_str() vollkommen aus. Aber was spricht dagegen, mit fstream's zu arbeiten?



  • Fstream ist mir nicht bekannt. Ich sende und empfange Daten mit WriteFile und ReadFile zu einem Mikrocontroller. Eine andere Möglichkeit kenne ich nicht. Gibt es da was besseres?


Log in to reply