我想在一個文件中讀取,包含以下hello.ms:FREAD跳過前8個字符
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!
當我加入8位到hello.ms文件,然後讀取Hello World!
誰能告訴我爲什麼發生這種情況?我試圖寫fseek(文件,0,SEEK_CUR)而不是倒帶,但也沒有工作。我在Google上找不到任何幫助,並沒有暗示程序員忘記使用fseek來開始。任何援助將是真棒!
當「R」保證位置指示器將在文件的開頭開不的fopen使用?你有沒有嘗試只是打開文件,並閱讀它沒有任何尋求? –
你爲什麼要找?只需使用Fgets:fgets()最多隻讀取一個小於流的大小字符並將它們存儲到s指向的緩衝區中。讀取在EOF或換行符後停止。如果讀取換行符,則將其存儲到緩衝區中。終止空字節(aq \ 0aq)存儲在緩衝區中的最後一個字符之後。 – Magn3s1um
@ScottyBauer那麼你尋求的理由是找到我相信的文件大小。要設置lSize變量no?雖然我不是專家。 – eatonphil