Превратить строку C с NULL-байтами в массив символов - PullRequest
0 голосов
/ 16 декабря 2009

Я использую GetOpenFileName с несколькими возможностями выбора. Выбранные файлы возвращаются в LPSTR. Внутри этого LPSTR выбранные файлы разделены пустыми байтами. Я хочу разделить LPSTR на массив, а затем зациклить этот массив.

В PHP я бы сделал:

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

Но так как я новичок в C, я понятия не имею, что я делаю.

Ответы [ 3 ]

3 голосов
/ 16 декабря 2009

Самое простое, что можно сделать, это, вероятно, просто перебрать возвращаемые строки напрямую. (Нет необходимости создавать отдельный массив.) Код будет выглядеть примерно так (проверка ошибок опущена):

GetOpenFileName( &ofn );

LPSTR pszFileName = ofn.lpstrFile;

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

Кроме того, не забывайте, что если пользователь выбирает несколько файлов, первой записью будет имя папки.

3 голосов
/ 16 декабря 2009

Вы можете сделать это, чтобы перебрать строки:

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 голос
/ 16 декабря 2009

Подойдет ли вам строковая копия?

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

Надеюсь, это поможет, С уважением, Том.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...