我正在尝试使用fread()读取ascii文件,按位补充每个字节并通过添加3并写入新文件对其进行编码。这是我到目前为止,但我一直遇到错误有没有人知道如何解决这个问题?我遇到的错误是按位补充,我的input.txt文件中有当前值 AB1 C23 DEF 但这是写入output.txt文件的内容 AB1 C23 DE
所以不确定如何解决它。
#include <stdio.h>
#include <stdlib.h>
int main() {
// declare variables
FILE *ip = NULL;
FILE *op = NULL;
unsigned char *b;
int i;
// open files
ip = fopen("input.txt", "r");
op = fopen("out.txt", "w+");
char out;
while(fread(b,sizeof(b), 1, ip) == 1) {
out = ~(&b);
//printf("%s\n", b);
fwrite(out, sizeof(b), 1, op);
}
if (feof(ip)) {
fclose(ip);
fclose(op);
}
}
答案 0 :(得分:-1)
您的代码中存在一些问题,但可能导致程序崩溃的问题是您使用变量b
。
unsigned char *b;
b
之前的星号表示变量b
是指向char
的指针,即char
的内存地址。但是,您实际上从未在b
指向的内存中分配位置。
while(fread(b,sizeof(b), 1, ip) == 1) {
out = ~(&b);
}
请注意,您在传递b
作为fread
应该写入的指针,这是正确的,但是您使用sizeof(b)
,这将不是大小一个char
,但是指向char
的指针的大小(通常分别是8位对64位)。然后,在while
循环内,引用&b
,它是b
的内存地址,即指向指针的指针,这不是您想要操作的指针。要让您的计划发挥作用,您需要将b
声明为char
并从那里开始工作。您的代码应如下所示:
#include <stdio.h>
#include <stdlib.h>
int main() {
// declare variables
FILE *ip = NULL;
FILE *op = NULL;
char b;
int i;
// open files
ip = fopen("input.txt", "r");
op = fopen("out.txt", "w+");
while(fread(&b, sizeof(b), 1, ip) == 1) {
b = ~b;
printf("%c\n", b);
fwrite(&b, sizeof(b), 1, op);
}
fclose(ip);
fclose(op);
}