PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [c++] strtok interpretiert NULL Terminator als backslash "\\" Delimiter



SonnejaColonia
10-09-2005, 20:53
Hallo alle zusammen,
in meinem Code passier etwas seltsames. Ich versuche aus einem vorhanden absoluten Dateinamen char path[256] = "C:\path\file.ext" nur den Pfad "C:\path\" zu extrahieren. Dafür verwende ich strtok und "\\" den backslash als Delimiter.



char* token;
token = strtok(path,"\\")

CString dllDir = "";

while(token != NULL)
{
strcat(dllDir.GetBuffer(dllDir.GetLength()),token) ;
strcat(dllDir.GetBuffer(dllDir.GetLength()),"\\");
token = strtok(NULL,"\\");
}


Ich habe mir die Zwischenergebnisse im Debugger angesehen und kann sehen, dass alle token anständig ausgelesen werden. Jedoch hört er nicht rechtzeitig auf.
Nach der Dateiendung kommt ja kein backslash mehr .. weiß jemand was ich falsch mache? Mir würde jeder Hinweis helfen.
Vielen Dank
SonnejaColonia

anda_skoa
11-09-2005, 01:39
Das in C++ so zu machen ist schon ziemlich gewagt :)

Wenn CString die String Klasse von MFC ist, dann hat MFC sicher eine einfacherer Möglichkeit den Dateinamen wegzuschneiden, bzw CString Methoden rückwärts nach dem letzten \ zu suchen



Ciao,
_

locus vivendi
11-09-2005, 11:33
Ich würde auch etwas anderes dafür nehmen. Nur als Beispiel sei hier Boost genannt. Dort kannst du einen Tokenizer finden.
http://www.boost.org/libs/tokenizer/index.html
Boost hat aber auch eine Dateisystem-Bibliothek, die genau das, was du machen willst, in einer portablen Weise unterstützt.
http://www.boost.org/libs/filesystem/doc/index.htm

Auf die MFC würde ich, wenn es geht, verzichten. Das sollte im Interesse der Portabilität sein, und möglicherweise sind die Alternativen auch einfacher zu benutzen oder mächtiger.