У меня есть следующая функция C с переменным числом аргументов, который должен искать char* word
через хэш-таблицу и написать true
или false
в файле, который, если указано, второй параметр; в противном случае это stdout
.Странное поведение функции с переменным числом параметров в C
Он отлично работает, если я указываю имя файла, проблема в том, что я не делаю (например, 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
в word
когда fname
не указано.
Большое спасибо за любую помощь, которую вы можете предоставить.
varargs не предполагается использовать таким образом. Вам лучше использовать 'void find (char * word, char * filename)' и проверить, является ли 'filename'' NULL', и если так писать в stdout. Также не забудьте закрыть файл, который вы открыли, если вы открыли файл. –