C言語によるプログラミング 基礎編という本に載っていたコードから質問です。
ネットユーザーのホームページ閲覧から、人気のあるホームページをランキングするというプログラムで、本ではランクと閲覧回数とアクセスしたURLを並び替える所まで終わり、最後にファイル出力するという段階です。
/* アドレスの出力処理 */ int WriteAccessRank(void) { int i; FILE *fp; fp=fopen("access_rank.txt","w"); if(fp==NULL) { fprintf(stderr,"ファイル作成ができません。access_rank,txt\n"); return -1; } fprintf(fp,"rank count address\n"); fprintf(fp,"-----------------------------------------------\n"); for( i = 0; i < COUNT_RANK; i++) { if(strlen(AccessRank[ i ].address)<=0) { break; } fprintf(fp,"%2d %6d \"%s\"\n",i+1,AccessRank[i].count,AccessRank[i].address); } if(fclose(fp)) { fprintf(strerr,"クローズに失敗しました。access_rank.txt\n"); exit(EXIT_FAILURE); } return 0; }
お伺いしたいのは、
1つ目。
strlen関数のところで、
<=0
と0以下になっているのが疑問です。
strlenで文字数を数えて、0ならば、それでデーターの終端だから、
break するのだと思うのですが、
文字数がマイナスになることはないので、=0で良いと思うのですが、なぜでしょうか。
文字が無いとEOFを返すのでしょうか、だから、-1を考慮にいれているのでしょうか。分かりません。
2つ目は、
fprintf(fp,"%2d %6d "%s"\n",・・・・
のところで、
"%s"
これがどう意味か分かりません。
sは文字列の表示だからだと思いますが、
二つの[ \ ]バックスラッシュと、[ " ]ダブルクオーテーションが不明です。
最後に、
if(fclose(fp)
これですが、クローズに失敗すると、EOFがfcloseの戻り値になるので、ifが実行されると解釈して良いのでしょうか。
よろしくお願いします。こんな素人の質問はこちらのサイトではふさわしくないように思い恐縮です。
回答6件
あなたの回答
tips
プレビュー