C++ schneidet strings ungewollt an den \0 ab



  • Ich habe eine Openfilename-Box mit OFN_ALLOWMULTISELECT erstellt. Ist alles auch gut und schön und die Funtkion speichert das Ergebnis auch in einer char Variablen chFiles. Wenn ich den String allerdings anzeigen lasse, ist da nur der Pfad drin, was heißt, daß der Rest nach er \0 abgeschnitten wurde.

    Wie extrahiere ich also die durch \0 getrennten Dateien?

    Danke für eure Hilfe!
    Sean



  • Nein, nicht ungewollt.

    const char* pos = /* ... */;
    	int len;
    	while(len = strlen(pos))
    	{
    		Tuwas(pos);
    		pos += len + 1;
    	}
    


  • Hast recht, wenn man die einzelnen Zeichen per Array abfragt werden alle ausgegeben.

    THX.



  • Irgendwie musst du ja die einzelnen Pfade trennen. Und da ist \0 schon ein sehr eleganter weg, da es ja von natur aus als Terminierungszeichen eines Strings interpretiert wird.



  • Hab da jetzt mal was zusammengefummelt, allerdings kann ich strcat net benutzen, der verlangt als zweiten Parameter einen (const char *), ich hab alles probiert aber irgendwie noch keinen cast gefunden der funktioniert. Hier mal der Code (bin noch relativ neu in c und das ganze mag vielleicht was umständlich aussehen):

    int i,x;
            char szMainPath[MAX_PATH_SMALL];
            char szFileName[MAX_PATH_SMALL];
            char chTmp;
    
            x=0;
            for (i=0; i<=strlen(chFiles); i++) {
              chTmp = chFiles[i];
    
              if (chTmp != '\0') {
                // Prüfen ob erster durchlauf
                if (x == 0) {
                  strcat (szMainPath, chTmp);
                } else {
                  strcat (szFileName, chTmp);
                }
              } else {
                if (x == 0) {
                  x=1;
                } else {
                  SendMessage (hListFiles, LB_ADDSTRING, 0, (LPARAM) szFileName);
                }
              }
            }
    

    Weiß jemand wie man das zum laufne bekommt?



  • Was hast du denn damit vor 🙄 - Nemesyzz hat dir doch schon den Code zum Auslesen gepostet 😕
    Mit strlen bekommst du übrigens nur die Zeichen bis zum ersten \0 😉 (darauf beruht ja der Code von Nemesyzz)



  • So ganz versteh ich Nemesyzz code nicht.

    Was genau ist "pos" denn? Und warum ist pos char wenn doch ein int value hinzukommt?
    Ich will mich ja nicht blöder antellen als ich bin, aber so ganz blick ich da nicht durch 😞



  • Das ist ein Pointer 😉 Er zeigt auf das erste Zeichen im String. Da \0 als String-Ende interpretiert wird erhältst du den ersten String im String-Array. Jetzt addierst du zum Zeiger die Stinglänge - somit zeigt er auf das erste Zeichen im zweiten String des Arrays.

    So ähnlich zumindest 🙄



  • Achso. Jetzt seh' ich auch. Nicht schlecht.

    Danke für eure Hilfe.


Anmelden zum Antworten