他の回答が指摘したように、printfにはNULLで終了しない文字列を渡しています。また、読み取っているファイルが100バイトを超えていることを確認していません。最後の1つは、fread()
にsize_t size
とsize_t niters
のパラメータを入れ替えたことです。
#include <stdio.h>
#include <sys/stat.h>
int main(int argc, char *argv[])
{
FILE *fr;
char c[1];
struct stat sb;
// obtains information about the file
if (stat(argv[1], &sb) == -1)
{
perror("stat()");
return(1);
};
// verifies the file is over 100 bytes in size
if (sb.st_size < 101)
{
fprintf(stderr, "%s: file is less than 100 bytes\n", argv[1]);
return(1);
};
// opens the file, or prints the error and exists
if (!(fr = fopen (argv[1], "r")))
{
perror("fopen():");
return(1);
};
fseek(fr, 100, SEEK_CUR);
while (fread(c, sizeof(c), 1, fr) > 0)
printf("%c", c[0]);
fclose(fr);
return(0);
}
ます。また、何かの行にchar c[1];
を変更することで、ファイルを読み込むの効率を向上させることができます:ここで
は、上記の問題(と間隔ビットをクリーンアップを)修正プログラムの修正版ですchar c[1024];
とにwhile文を更新:
while (fread(c, sizeof(char), 1023, fr) > 0)
{
c[1023] = '\0';
printf("%s", c);
};
一度に1バイト以上を読み込んでからprintfを使用すると、入力ファイルはNULL文字のないテキストファイルであることが前提です。 –