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

我尝试先使用 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

但是当我运行程序时,对话框过滤器显示如下
“Rule Files (*.net and *.rul)\0*.rul;*.net\0”;

谢谢

4

1 回答 1

1

使用"\\0"不会做任何有用的事情,\0当你想要一个空字节时,它只会在你的字符串中放入两个字符。但是,C 中的字符串以 by 结尾,'\0'因此您不能strcat在没有一点指针运算的情况下使用它来构造一个以 nul 分隔的字符串。

所以,鉴于这些:

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

更好的方法是分配你的filtermalloc这样你就不必担心缓冲区溢出:

char *filter = malloc(strlen(filterText) + 1 + strlen(filterVal) + 1);
于 2011-06-10T03:56:04.633 回答