我的代码无法正常工作,即打开一个文件,计算其中的字符数,然后使用分配该文件malloc()
。然后,我应该使用从一个文件中读取字符(我的文件包含“ Hello World!”)fread()
,然后使用将它们写入空白.txt
文件fwrite
。
到目前为止,我的代码正在打印损坏的字符。我找不到任何针对我的问题的问题。如果有人能告诉我我在做什么错,我将不胜感激。我认为这是特定于我fread
和fwrite
致电的,但是我没有尝试过。
有问题的代码(尚未评论,对不起!):
#include <stdio.h>
#include <stdlib.h>
//initialized using ./a.out in.txt out.txt
int main(int argc, char *argv[])
{
FILE *fp;
int count, end;
char *memory;
char c[64];
fp = fopen(argv[1], "r");
if((fp) == NULL)
{
printf("Error: cannot open file.\n");
}
else
{
while((fgetc(fp))!= EOF)
{
count++;
}
memory = (char*)malloc(count);
c[64] = fread(memory, sizeof(char), 1, fp);
fclose(fp);
fp = fopen(argv[2], "w");
fwrite(c, sizeof(char), sizeof(c), fp);
fclose(fp);
free(memory);
}
return 0;
}
代码有逻辑错误,如下
int count= 0 , char c[64]= {0};
memory = malloc(count);
fseek(fp,0,SEEK_SET);
c[64] = fread(memory, sizeof(char), 1, fp);
在这种情况下,如果您正在读取单个char
文件,则应该读取完整的文件,要读取完整的文件do,fread(memory, 1, count, fp);
并且c [64]超出范围并fread
返回成功读取的char数。
fwrite(c, sizeof(char), sizeof(c), fp);
在此过程中,您正在将完整的char数组写入文件,但是您仅读取了数组中读取了char数量的单个变量。因此,您正在将未初始化的char数组写入文件。因此您的文件中的字符已损坏。
要写文件吗 fwrite(memory, 1, count, fp);
为解决此问题,请避免上述错误,并在char数组中读取完整的文件,然后写入。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句