ファイルの中身は適当に・・・
odsauodna gs g s gjsdnaofuhsodahfonsda za ds fs dg b dn gsdjbofhouhsdugf da g fdksjoufyhsodhbgd fg ds g df g gdfskjgouy
C
1 fseek(fp, 0, SEEK_END); //なくても良い 2 count = ftell(fp); 3 printf("%d Bytes\n",count);
ファイルの中の文字数をカウントします。
これを自分で作ろうとしました。
最初にやったのは・・・
C
1while((ch = fgetc(fp)) != EOF) 2 count++;
出来ませんでした。
念のため確認しました。
while((ch = fgetc(fp)) != EOF) printf("%c", ch); putchar(ch);
何も表示されません。
なぜでしょうか??
別のアプローチ
while(fscanf(fp, "%s", buf) != EOF){ sprintf(str, "%s\n", buf); } strlen(str);
最初の11文字の文字数しか取得できません。
strlen()は\0が出現するまでの文字数でしたよね??
このファイルは改行がたくさんありまが、改行=\0ではないので、strlen()でも取得出来そうですが、なぜかできません・・・
ファイルの最後にEOFがあるのは分かるのですが、このファイルをバッファの中に入れた場合、\0はどこに存在するでしょうか??
環境を書いておきます。
Linux 64bit Debianです。
[追記]
再度プログラムを最初から作り直しました。
C
1#include<stdio.h> 2#include<string.h> 3 4void copy(FILE *fp, FILE *fr){ 5 char buf[1024]; 6 char str[1024]; 7 int ch, count = 0; 8 9 /*while(fscanf(fp, "%s", buf) != EOF){ 10 sprintf(str, "%s\n", buf); 11 fputs(str, fr); 12 }*/ 13 14 while((ch = fgetc(fp)) != EOF){ 15 fputc(ch, fr); 16 printf("%c", ch); 17 count++; 18 } 19 printf("\n"); 20 printf("%d Bytes\n", count); 21} 22 23int main(int argc, char **argv){ 24 FILE *fp, *fr; 25 26 if(argc > 0) 27 fp = fopen(argv[1], "r"); 28 fr = fopen(argv[2], "w"); 29 if(!fp) 30 printf("couldn't open file\n"); 31 else{ 32 copy(fp, fr); 33 fclose(fp); 34 fclose(fr); 35 } 36 return 0; 37}
なぜかちゃんと問題なく動いています。
????
1回目のプログラムは
void copy(FILE *fp, FILE *fr){ char buf[1024]; char str[1024]; int ch, count = 0; while(fscanf(fp, "%s", buf) != EOF){ sprintf(str, "%s\n", buf); fputs(str, fr); } [ここに質問の文字数をカウントするプログラムを書いた] }
・・・正直、何がダメだったのかさっぱり・・・
回答3件
あなたの回答
tips
プレビュー