代码之家  ›  专栏  ›  技术社区  ›  Alec Gorge

将具有空字节的C字符串转换为char数组

  •  0
  • Alec Gorge  · 技术社区  · 15 年前

    我正在使用 GetOpenFileName 具有多种选择功能。拾取的文件将返回到lpstr中。在这个lpstr中,所选文件由空字节分隔。我想将lpstr分割成一个数组,然后在该数组上循环。

    在PHP中,我会:

     $array = explode("\0", $string);
    

    但由于我是C的新手,我不知道我在做什么。

    3 回复  |  直到 15 年前
        1
  •  3
  •   KeatsPeeks    15 年前

    您可以这样做来循环字符串:

    char *Buffer;             // your null-separated strings
    char *Current;            // Pointer to the current string
    // [...]
    for (Current = Buffer; *Current; Current += strlen(Current) + 1)
      printf("GetOpenFileName returned: %s\n", Current);
    

    如果确实有必要,您可以调整此代码以创建数组。

        2
  •  3
  •   Peter Ruderman    15 年前

    最简单的方法可能就是直接循环返回的字符串。(不需要创建单独的数组。)代码看起来像这样(省略了错误检查):

    GetOpenFileName( &ofn );
    
    LPSTR pszFileName = ofn.lpstrFile;
    
    while( *pszFileName != 0 )
    {
        // do stuff...
        pszFileName += strlen( pszFileName ) + 1;
    }
    

    另外,不要忘记,如果用户选择多个文件,第一个条目将是文件夹名。

        3
  •  1
  •   t0mm13b    15 年前

    一个字符串拷贝能帮你做这个把戏吗?

    LPSTR ptrFileName;
    char buf[100];
    strcpy(buf, ptrFileName);
    /* Now iterate */
    for (int nLoopCnt = 0; nLoopCnt < (sizeof(buf) / sizeof(buf[0])); nLoopCnt++){
       char ch = buf[nLoopCnt];
       /* Do whatever with ch */
    }
    

    希望这有帮助, 最好的问候, 汤姆。