我正在学习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;
}