C++ 从char*变量解析文件名

C++ 从char*变量解析文件名,c++,visual-c++,mfc,C++,Visual C++,Mfc,我在字符指针变量中有一个值,该值是动态更改的 例如 one case: char *ptr = sometext || abc.txt; second case: char *ptr = abc.txt || sometext; 我只需要另一个变量中的文件名。 str=abc.txt 目前我正在使用代码: CString str; char* lpszToToken = stLine.GetBuffer(stLine.GetLength()); char* lpszToken =

我在字符指针变量中有一个值,该值是动态更改的

例如

one case:
   char *ptr = sometext || abc.txt;

second case:
   char *ptr = abc.txt || sometext;
我只需要另一个变量中的文件名。 str=abc.txt

目前我正在使用代码:

CString str;
char* lpszToToken = stLine.GetBuffer(stLine.GetLength());
char* lpszToken = strtok(lpszToToken, "|");
while(lpszToken != NULL)
{
   lpszToken = strtok(NULL, "|");
   str = lpszToken;
}
但它只在第一种情况下起作用: 我需要一个genric代码在这两种情况下运行 有什么想法吗?
谢谢,

我的C已经生锈了,但为什么不做如下的事情呢:

char* fname = strtok( fileNames, "|");
while (fname != NULL) {
    // do something with the file here..
    processFile( fname);             
    fname = strtok( NULL, "|");         // next.
}
此外,匈牙利符号是一种可怕的编程方式。它有效地隐藏和模糊了大部分含义,使清晰和简单的问题变得不透明和丑陋。与您提供的gack相比,看看我的示例的可读性如何

很不幸,你的导师(和佩佐尔德)错误地把这个教给了你。我建议改为写“识字”代码

见:


既然您有可用的CString,您可以使用CString::Find或CString::Tokenize

@sasha.sochka请提供此类一般性陈述的基本原理/链接。如果我的意见被计算在内,我会投票认为
strok
是有史以来设计最差的函数(在C中)。我同意sasha。隐藏的全局状态(比使用全局变量更糟糕,因为它是不透明的),不清楚的API设计和安全问题。但是,嘿,我还是新手的时候也用过。