как strcat в параметрах OPENFILENAME в программировании на C - PullRequest
0 голосов
/ 10 июня 2011

У меня есть рабочий код с использованием OPENFILENAME.Могу ли я узнать, как использовать strcat для динамического управления его параметрами

, этот работает

//ofn.lpstrFilter = "Rule Files (*.net and *.rul)\0*.rul;*.net\0";   

char filter[100];  
char filterText[100];  
char filterVal[100];
strcpy(filterText, "Rule Files (*.net and *.rul)");   
strcpy(filterVal, "*.rul;*.net");   

Сначала я попытался использовать strcat с '\ 0', но он показывает только вот так
strcat (filter, filterText);
strcat (filter,"\0");
strcat (filter,filterVal);
strcat (filter,"\0");
ofn.lpstrFilter = filter; \\missing \0

И я попытался использовать '\\ 0'
strcat (filter, filterText);
strcat (filter,"\\0");
strcat (filter,filterVal);
strcat (filter,"\\0");

ofn.lpstrFilter = filter; \\now includes the\0

, но при запуске программы фильтр диалогового окна выглядит следующим образом
"Файлы правил (* .net и * .rul) \ 0 * .rul; *. Net \ 0";

спасибо

1 Ответ

1 голос
/ 10 июня 2011

Использование "\\0" не принесет ничего полезного, просто вставит два буквальных символа \0 в вашу строку, когда вы захотите нулевой байт. Тем не менее, строки в C заканчиваются на '\0', поэтому вы не можете использовать strcat для создания строки с разделителями, равными нулю, без небольшой арифметики с указателями.

Итак, учитывая эти:

char filterText[] = "Rule Files (*.net and *.rul)";
char filterVal[]  = "*.rul;*.net";
char filter[100];

Вам нужно будет сделать что-то вроде этого:

/*
 * The first one is a straight copy.
 */
strcpy(filter, filterText);

/*
 * Here we need to offset into filter to right after the
 * nul byte from the first copy.
 */
strcpy(&filter[strlen(filterText) + 1], filterVal);

Лучше было бы выделить filter с помощью malloc, чтобы вам не приходилось беспокоиться о переполнениях буфера:

char *filter = malloc(strlen(filterText) + 1 + strlen(filterVal) + 1);
...