可変数の引数を持つ次のC関数があります。これはchar* word
、ハッシュテーブルを検索して、指定されている場合は2番目のパラメーターであるファイルに書き込む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
word
fname
何卒よろしくお願い申し上げます。