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

匆匆过客 提交于 2019-12-11 16:42:55

问题


My professor specified that file_1.txt be read 100 bytes at a time into a char array. I produced the following snippet code :

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 reads : "test file for the project\n". I used gcc encrypt.c Then :

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

Then : ./a.out 111 file_2.txt file_3.txt

cat file_3.txt reads: 

test file for the project :

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

During the first run of the program with file_1.txt and file_2.txt, the print statement in the nested while loop printed:

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

Where did these random elements come from?


回答1:


Initializing all elements of the buffer char array to 0 before using fread() got rid of the junk.



来源:https://stackoverflow.com/questions/47732691/c-fread-on-short-file-is-producing-junk-after-the-file-ends

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!