【问题标题】:Parse a file name from char * variable从 char * 变量解析文件名
【发布时间】:2013-07-15 08:56:07
【问题描述】:

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

例如

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;
}

但它仅适用于第一种情况: 我需要一个通用代码在这两种情况下运行 任何的想法? 谢谢,

【问题讨论】:

    标签: c++ visual-c++ mfc


    【解决方案1】:

    我的 C 生锈了,但为什么不这样:

    char* fname = strtok( fileNames, "|");
    while (fname != NULL) {
        // do something with the file here..
        processFile( fname);             
        fname = strtok( NULL, "|");         // next.
    }
    

    此外,匈牙利符号是一种可怕的编程方式。它有效地隐藏和混淆了大多数含义,使清晰和简单的问题变得不透明和丑陋。与您提供的 gack 相比,看看我的示例的可读性如何?

    很遗憾,您的讲师(和 Petzold)错误地教给您这个。我建议改为编写“识字”代码。

    见:

    【讨论】:

    • @sasha.sochka 请提供此类一般性陈述的理由/链接。
    • 如果我的意见被计算在内,我会投票认为strtok 是有史以来设计最差的函数(在 C 中)
    • 我同意萨沙的观点。隐藏的全局状态(比使用全局变量更糟糕,因为它是不透明的),不清楚的 API 设计和安全问题。 stackoverflow.com/questions/5999418/… 不过嘿嘿,我小时候也用过。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-04
      • 1970-01-01
      • 2020-10-09
      • 2021-11-28
      • 1970-01-01
      • 2011-11-27
      相关资源
      最近更新 更多