如何在C编程中使用OPEN FILENAME参数进行strcat

时间:2011-06-10 02:40:16

标签: c strcat

我有一个使用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”;

感谢

1 个答案:

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