我有一个使用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”;
感谢
答案 0 :(得分:1)
使用"\\0"
将无法执行任何有用的操作,只需在字符串中输入文字两个字符\0
即可。但是,C中的字符串由'\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);
更好的方法是使用filter
分配malloc
,这样您就不必担心缓冲区溢出了:
char *filter = malloc(strlen(filterText) + 1 + strlen(filterVal) + 1);