テキストファイル探して表示するプログラムで最後のデータがダブって表示されるので
、どこがわるいのか分からないので教えてください。
// delete_seek5.c #include <stdio.h> #include <stdlib.h> #include <sys\stat.h> //ファイルサイズを取得する long getFileSize(char *file) { struct stat statBuf; int size; if (stat(file, &statBuf) == 0) // ファイルfileからファイル情報を取得し、 // stat構造体変数statBuf)に格納する。 size = (int)(statBuf.st_size); // サイズを取得 printf("size: %d(バイト)\n",size); // 表示 return statBuf.st_size; // off_t st_size; // 全体のサイズ (バイト単位) return -1L; } int main() { FILE *fp; char *ptr; char *file = "data_tel.txt"; long size; char buff[100+1]; fp = fopen(file, "r"); if (fp == NULL){ printf("ファイルオープンエラー\n"); return -1; } //write(file); size = getFileSize(file); if (size == -1){ printf("ファイルサイズの取得に失敗しました\n"); return -1; } printf("printf1%sのサイズ: %ld\n", file, size); //mallocでメモリを確保する ptr = ( char * )malloc(size); if (ptr == NULL) { printf("malloc()に失敗しました。\n"); return -1; } printf("確保したメモリブロックのアドレス: %p\n\n", ptr); while(ptr){ ptr= fgets(buff, 100, fp); // fgetsが返すbuffの先頭アドレスをptrに代入する。 if (buff == NULL){ printf("読み込みデータなし\n"); }else{ printf("%s", buff); // printf()関数で読み込んだ内容を表示します。 // fgets()関数でbuffに読み込まれるのはfileの改行も // 読み込むので\nとしなくても、改行される。 } } printf("fseek:%d\n", fseek(fp, 0, SEEK_SET)); // SEEK_SET:ファイルの先頭から // fseek()関数で読み込み位置をファイルの先頭から // 0バイト目に戻します。 fclose(fp); } 実行結果は以下になります。 naka@naka ~/kadai/kadai9-8 $ gcc -o delete_seek5 delete_seek5.c -Wall naka@naka ~/kadai/kadai9-8 $ delete_seek5 size: 120(バイト) printf1data_tel.txtのサイズ: 120 確保したメモリブロックのアドレス: 02B92AF8 naka ,090-7777 kiyoko ,090-9999 satou ,090-3214 kinosita ,090-8679 yamada ,090-4325 itou ,080-6354 読み込みデータなし fseek:0 naka@naka ~/kadai/kadai9-8 $
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/01/03 11:41
2018/01/03 12:02
退会済みユーザー
2018/01/03 12:22
2018/01/03 13:25