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相比,看看我的示例的可读性如何
很不幸,你的导师(和佩佐尔德)错误地把这个教给了你。我建议改为写“识字”代码
见:
strok
是有史以来设计最差的函数(在C中)。我同意sasha。隐藏的全局状态(比使用全局变量更糟糕,因为它是不透明的),不清楚的API设计和安全问题。但是,嘿,我还是新手的时候也用过。