0

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

最初に'\0'でstrcatを使用してみましたが、このようにしか表示されません
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 ";

ありがとう

4

1 に答える 1

1

を使用しても何の役にも立ちません。nulバイトが必要な場合は、文字列に"\\0"リテラルの2文字を入れるだけです。\0ただし、Cの文字列はで終了するため、ポインタ演算を少し行わずにnulで区切られた文字列を作成するために'\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);
于 2011-06-10T03:56:04.633 に答える