为什么我的代码没有到达末尾而是在XOR循环完成之前停止?

时间:2019-10-12 22:06:27

标签: c gcc mingw32

我正在学习C#中的C语言,所以如果我在这里犯了任何愚蠢的错误,我感到抱歉。

我正在尝试读取文件,对其进行XOR,然后对该文件执行其他一些操作。但是,在xor_array函数中,循环甚至不会中途停止。

我正在输入一个1343488字节大的文件。但是,当我尝试使用GCC main.c -o main.exe && main.exe vscom.exe运行程序时,printf语句大约在迭代:1340408的44927处停止,这取决于我将代码放置在文件中的方式。

我不确定我在这里做错了什么以及应该如何解决,有人可以给我指示的方向吗?

谢谢您的时间。

我有以下代码:

#include <stdio.h>
#include <stdlib.h>

int read_file_bytes(char file_path[256], char *out)
{
    FILE *fileptr;
    char *buffer;
    long filelen;

    fileptr = fopen(file_path, "rb");
    if (fileptr)
    {
        fseek(fileptr, 0, SEEK_END);
        filelen = ftell(fileptr);
        rewind(fileptr);
        buffer = (char *)malloc((filelen) * sizeof(char));
        fread(buffer, filelen, 1, fileptr);
        fclose(fileptr);
        out = buffer;
        return filelen;
    }
    return 0;
}

void xor_array(char *inp, int inplen)
{
    char* out = (char*)malloc(inplen * sizeof(char));
    for (int i = 0; i < inplen; i++)
    {
        // Originally used a key but that had the same output so dumbing it down till I can fix the problem
        out[i] = inp[i] ^ 1;
        printf("Iteration: %d of %d \n", i, inplen);
    }

    inp = out;
    free(out);
}

// Argument you give is the path to another file
int main(int argc, char* argv[])
{
    char* file_bytes; // Buffer to hold our file's bytes
    int bytes_read; // Amount of bytes read

    if(argc == 1)
    {                
        return 1;
    }

    bytes_read  = read_file_bytes(argv[1], file_bytes);        
    if(bytes_read == 0)
    {                
        return 1;
    }

    xor_array(file_bytes, bytes_read);
    return 0;
}

0 个答案:

没有答案