文件结束后,短文件上的 C fread() 会产生垃圾

C fread() on short file is producing junk after the file ends

我的教授指定 file_1.txt 一次读取 100 个字节到 char array 中。我生成了以下代码片段:

int key;
key = atoi(argv[1]);
FILE *file_pointer;
file_pointer = fopen(argv[2], "rb");
char buffer[100];
char output[sizeof(int)][100];
int output_counter = 0;
int read_counter;
int read_elements;

while(read_elements = fread(buffer, 1, 100, file_pointer) > 0)
{  
    read_counter = 0;    
    while(read_counter < 100)
    {

        printf("xor'ing %d and %d\n", key, buffer[read_counter]);
        output[output_counter][read_counter] = buffer[read_counter] ^ key;
        read_counter = read_counter + 1;
    }

    output_counter = output_counter + 1;
}

fclose(file_pointer);

file_1.txt 读作:"test file for the project\n"。我用了 gcc encrypt.c 然后:

./a.out 111 file_1.txt file_2.txt

然后: ./a.out111file_2.txtfile_3.txt

cat file_3.txt reads: 

项目的测试文件:

v▒▒▒s▒▒@////////▒

file_1.txtfile_2.txt 程序的第一个 运行 期间,嵌套 while 循环中打印语句:

xor'ing 111 and 116

xor'ing 111 and 101

xor'ing 111 and 115

xor'ing 111 and 116

xor'ing 111 and 32

xor'ing 111 and 102

xor'ing 111 and 105

xor'ing 111 and 108

xor'ing 111 and 101

xor'ing 111 and 32

xor'ing 111 and 102

xor'ing 111 and 111

xor'ing 111 and 114

xor'ing 111 and 32

xor'ing 111 and 116

xor'ing 111 and 104

xor'ing 111 and 101

xor'ing 111 and 32

xor'ing 111 and 112

xor'ing 111 and 114

xor'ing 111 and 111

xor'ing 111 and 106

xor'ing 111 and 101

xor'ing 111 and 99

xor'ing 111 and 116

xor'ing 111 and 10

xor'ing 111 and 0

xor'ing 111 and 0

xor'ing 111 and 0

xor'ing 111 and 0

xor'ing 111 and 0

xor'ing 111 and 0

xor'ing 111 and 118

xor'ing 111 and 0

xor'ing 111 and 0

xor'ing 111 and 0

xor'ing 111 and 0

xor'ing 111 and 0

xor'ing 111 and 0

xor'ing 111 and 0

xor'ing 111 and -88

xor'ing 111 and -31

xor'ing 111 and -94

xor'ing 111 and 2

xor'ing 111 and -120

xor'ing 111 and 127

xor'ing 111 and 0

xor'ing 111 and 0

xor'ing 111 and 0

xor'ing 111 and 0

xor'ing 111 and 0

xor'ing 111 and 0

xor'ing 111 and 0

xor'ing 111 and 0

xor'ing 111 and 0

xor'ing 111 and 0

xor'ing 111 and -57

xor'ing 111 and 115

xor'ing 111 and -33

xor'ing 111 and 2

xor'ing 111 and -120

xor'ing 111 and 127

xor'ing 111 and 0

xor'ing 111 and 0

xor'ing 111 and 1

xor'ing 111 and 0

xor'ing 111 and 0

xor'ing 111 and 0

xor'ing 111 and 0

xor'ing 111 and 0

xor'ing 111 and 0

xor'ing 111 and 0

xor'ing 111 and -19

xor'ing 111 and 9

xor'ing 111 and 64

xor'ing 111 and 0

xor'ing 111 and 0

xor'ing 111 and 0

xor'ing 111 and 0

xor'ing 111 and 0

xor'ing 111 and 47

xor'ing 111 and 47

xor'ing 111 and 47

xor'ing 111 and 47

xor'ing 111 and 47

xor'ing 111 and 47

xor'ing 111 and 47

xor'ing 111 and 47

xor'ing 111 and 0

xor'ing 111 and 0

xor'ing 111 and 0

xor'ing 111 and 0

xor'ing 111 and 0

xor'ing 111 and 0

xor'ing 111 and 0

xor'ing 111 and 0

xor'ing 111 and -96

xor'ing 111 and 9

xor'ing 111 and 64

xor'ing 111 and 0

这些 random 元素来自哪里?

在使用 fread() 之前将缓冲区 char 数组的所有元素初始化为 0 摆脱垃圾。