我正在尝试读取包含以下内容的 hello.ms 文件:
Hello World!
使用此 C 代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int store_file(char* file_dir, char** buffer)
{
FILE* file;
long lSize;
size_t result;
char* tempBuffer;
file = fopen(file_dir, "r");
if (file==NULL)
{
fputs("File error.", stderr);
exit(1);
}
fseek(file, 0, SEEK_END);
lSize = ftell(file);
rewind(file);
tempBuffer = (char*)malloc(sizeof(char)*lSize);
if (tempBuffer == NULL)
{
fputs("Memory error.", stderr);
exit(2);
}
result = fread(tempBuffer, 1, lSize, file);
if (result != lSize)
{
fputs("Reading error.", stderr);
exit(3);
}
*buffer = tempBuffer;
free(tempBuffer);
fclose(file);
return lSize;
}
void fsa_cycle(char* file_dir)
{
char* buffer;
int bufferSize = store_file(file_dir, &buffer);
fwrite(buffer, sizeof(char), bufferSize, stdout);
}
int main(int argc, char* argv[])
{
if(argc < 2)
{
printf("\nSyntax: %s <file-name>\n\n", argv[0]);
exit(1);
}
fsa_cycle(argv[1]);
return 0;
}
它编译得很好。没有警告或错误。但它只输出 rld!
当我向 hello.ms 文件添加 8 个空格时,它会显示为 Hello World!
谁能告诉我为什么会这样?我尝试编写 fseek(file, 0, SEEK_CUR) 而不是 rewind 但这也不起作用。我在 Google 上找不到任何帮助,但没有提示程序员忘记使用 fseek 来开始。任何帮助都会很棒!
最佳答案
您正在使用 free
释放 tempBuffer
内存,但该内存块实际上已分配给 buffer
。
free
不同的编译器可能会有所不同,但我的和你的一样,只需删除 free(tempBuffer);
关于c - fread 跳过前 8 个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17686062/