Mam następujących funkcji C o zmiennej liczbie argumentów, który ma przeszukać char* word
poprzez hashtable i napisać true
lub false
w pliku, który, jeśli określony, jest drugim parametrem; w przeciwnym razie jest to stdout
.Dziwne zachowanie funkcji o zmiennej liczbie parametrów w C
Działa dobrze, jeśli określę nazwę pliku, problem występuje wtedy, gdy tego nie robię (np. find("foo")
). W takim przypadku zapisuje wynik w pliku o nazwie foo
zamiast stdout
.
Jaka jest przyczyna?
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");
}
W miejsce <condition>
Próbowałem fname != NULL
i strlen(fname) > 0
ale te nie mają zastosowania i utrzymuje widząc fname
fname
jako word
gdy nie jest określona.
Dziękuję za pomoc.
varargs nie powinny być używane w ten sposób. Lepiej jest użyć 'void find (char * word, char * filename)' i sprawdzić czy 'filename' ma wartość' NULL', a jeśli tak, to napisz na stdout. Nie zapomnij również zamknąć pliku, otworzyłeś, jeśli otworzyłeś plik. –