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

时间:2009-12-15 22:57:01

标签: c winapi

我正在使用具有多项选择功能的GetOpenFileName。挑选的文件在LPSTR中返回。在此LPSTR中,所选文件由NULL字节分隔。我想将LPSTR拆分成一个数组,然后遍历该数组。

在PHP中我会这样做:

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

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

3 个答案:

答案 0 :(得分:3)

你可以这样做来循环遍历字符串:

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

如果真的有必要,您可以调整此代码来创建数组。

答案 1 :(得分:3)

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

GetOpenFileName( &ofn );

LPSTR pszFileName = ofn.lpstrFile;

while( *pszFileName != 0 )
{
    // do stuff...
    pszFileName += strlen( pszFileName ) + 1;
}

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

答案 2 :(得分:1)

字符串副本会为你做这个伎俩吗?

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 */
}

希望这有帮助, 最好的祝福, 汤姆。