質問: %d\n", WORDlist[i], WORDcount[i]); } fclose(fp); } ``` ### 試したこと 最初に用意しておく配列の長さが短いのかと思い要素数を増やした ### ターミナルで実行 ファイルからfgetcでスペースがくるまで(ASCIIコードで32)文字を読み取り、スペースがきたら読み取った単語(newWordという配列にある)がWORDlistという配列にすでに含まれているかをstrcmpで比べる。 あった→WORDcountのiの値に1を足す なかった→WORDcountのiを0から1にする newWordの配列にある読み取った単語をWORDlistの配列にstrcpyを用いてコピーする
回答: > > 参考書やネットで調べても&がいるとは書いていない。 > > > それは文字列の名前だけ([]が付かない)の比較じゃないでしょうか? *※わたしも探してみましたが文字列を途中からコピーしたり比較したりする例は見つかりませんでした。* strcmp()やstrcpy()は文字列(終端が'\0')を対象とする関数です。 文字の比較ではありません。したがって strcmp(newWord[i], WORDlist[i]) は、は文字をアドレスとして渡していることになります。 エラーにならなければ、何が起こってもしょうがない状況です。 「追記」 そのままコンパイルすると以下のワーニングが出ます。 ・・・説明の出来ないエラーやワーニングは潰しましょう。 参考:エラーメッセージの読み方と対処, 検索や質問の原則 ``` usr ~/Project/test % cc t4.c t4.c:18:8: warning: implicit conversion loses integer precision: 'int' to 'char' [-Wimplicit-int-conversion] ch=fgetc(fp);//ファイルから一文字読み取る ~^~~~~~~~~ t4.c:20:10: warning: implicitly declaring library function 'strcmp' with type 'int (const char *, const char *)' [-Wimplicit-function-declaration] if(strcmp(newWord[i], WORDlist[i]) == 0) ^ t4.c:20:10: note: include the header or explicitly provide a declaration for 'strcmp' t4.c:20:17: warning: incompatible integer to pointer conversion passing 'char' to parameter of type 'const char *'; take the address with & [-Wint-conversion] if(strcmp(newWord[i], WORDlist[i]) == 0) ^~~~~~~~~~ & t4.c:20:29: warning: incompatible integer to pointer conversion passing 'char' to parameter of type 'const char *'; take the address with & [-Wint-conversion] if(strcmp(newWord[i], WORDlist[i]) == 0) ^~~~~~~~~~~ & t4.c:28:7: warning: implicitly declaring library function 'strcpy' with type 'char *(char *, const char *)' [-Wimplicit-function-declaration] strcpy(WORDlist[i], newWord[i]);//WORDlistに登録 文字列なので =で代入できない ^ t4.c:28:7: note: include the header or explicitly provide a declaration for 'strcpy' t4.c:28:14: warning: incompatible integer to pointer conversion passing 'char' to parameter of type 'char *'; take the address with & [-Wint-conversion] strcpy(WORDlist[i], newWord[i]);//WORDlistに登録 文字列なので =で代入できない ^~~~~~~~~~~ & t4.c:28:27: warning: incompatible integer to pointer conversion passing 'char' to parameter of type 'const char *'; take the address with & [-Wint-conversion] strcpy(WORDlist[i], newWord[i]);//WORDlistに登録 文字列なので =で代入できない ^~~~~~~~~~ & t4.c:32:15: warning: variable 'ch' used in loop condition not modified in loop body [-Wfor-loop-analysis] for(i=0; (( ch!='\0' ) && ( ch!=EOF )); i++){ //文字列の最後に含まれている\0 ^~ ~~ 8 warnings generated. usr ~/Project/test % ```