the*_*ude 5 c arguments stdout list variable-length
我有以下带有可变数量参数的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");
}
Run Code Online (Sandbox Code Playgroud)
在地方的<condition>我试过fname != NULL和strlen(fname) > 0,但那些不适用,它让看到fname的word时候fname没有被指定.
非常感谢您提供的任何帮助.
来自va_*的手册页:
如果没有下一个参数,或者type与实际的下一个参数的类型不兼容(根据默认参数提升而提升),则会发生随机错误.
如果要使用变量参数列表,则需要为列表设计某种终结符(例如,始终添加虚拟NULL参数):
find (word, NULL);
find (word, filename, NULL);
Run Code Online (Sandbox Code Playgroud)
或提供参数数量作为参数:
find (1, word);
find (2, word, filename);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
82 次 |
| 最近记录: |