【发布时间】:2013-02-09 14:49:26
【问题描述】:
我有以下带有可变数量参数的 C 函数,它应该通过哈希表搜索 char* word 并在文件中写入 true 或 false,如果指定,它是第二个参数;否则为stdout。
如果我指定文件名,它工作正常,问题是当我不指定时(例如find("foo"))。在这种情况下,它将结果写入名为 foo 而不是 stdout 的文件中。
是什么原因?
void find(char* word, ...)
{
va_list list;
char *fname = NULL;
va_start(list, word);
FILE* f;
fname = strdup(va_arg(list, char*));
va_end(list);
if (<condition>) // condition suited for the case in which the file name is received
f = fopen(fname, "a");
else
f = stdout;
if (member(word))
fprintf(f, "True\n");
else
fprintf(f, "False\n");
}
代替<condition>,我尝试了fname != NULL 和strlen(fname) > 0,但这些都不适用,并且当未指定fname 时,它一直将fname 视为word。
非常感谢您提供的任何帮助。
【问题讨论】:
-
不应该以这种方式使用可变参数。您最好使用
void find(char* word, char* filename)并检查filename是否为NULL,如果是则写入标准输出。如果您确实打开了文件,也不要忘记关闭您打开的文件。
标签: c list arguments stdout variable-length