行にいくつかの数字がある .txt ファイルから読み込もうとしています。
そのように見えます。
example.txt
123
456
789
555
これを読み取り用のバイナリ ファイルとして開きます。このファイルを 1 行ずつ読み取りたいので、すべての行に 4 文字 (3 つの数字と 1 つの改行文字 '\n') があることがわかります。
私はこれをやっています:
FILE * fp;
int page_size=4;
size_t read=0;
char * buffer = (char *)malloc((page_size+1)*sizeof(char));
fp = fopen("example.txt", "rb"); //open the file for binary input
//loop through the file reading a page at a time
do {
read = fread(buffer,sizeof(char),page_size, fp); //issue the read call
if(feof(fp)!=0)
read=0;
if (read > 0) //if return value is > 0
{
if (read < page_size) //if fewer bytes than requested were returned...
{
//fill the remainder of the buffer with zeroes
memset(buffer + read, 0, page_size - read);
}
buffer[page_size]='\0';
printf("|%s|\n",buffer);
}
}
while(read == page_size); //end when a read returned fewer items
fclose(fp); //close the file
printf では、この結果が期待されます
|123
|
|456
|
|789
|
|555
|
しかし、私が取っている実際の結果は次のとおりです。
|123
|
456|
|
78|
|9
6|
|66
|
そのため、最初の 2 つの fread の後、2 つの数字のみを読み取り、改行文字で何かが完全に間違っているように見えます。
では、ここで fread の何が問題なのですか?