Я пытаюсь прочитать в файле, hello.ms, содержащий следующее:Fread пропускает первые 8 символов
Hello World!
Используя этот код С:
#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 для начала. Любая помощь была бы потрясающей!
не FOPEN при открытии с «г» гарантии, что индикатор положения будет в начале файла? Вы пробовали просто расширять файл и читать его без каких-либо поисков? –
Почему вы ищете? Просто используйте Fgets: fgets() читает не более одного символа размера из потока и сохраняет их в буфер, на который указывает s. Чтение останавливается после EOF или новой строки. Если читается новая строка, она сохраняется в буфере. Конечный нулевой байт (aq \ 0aq) сохраняется после последнего символа в буфере. – Magn3s1um
@ScottyBauer Ну, причина, по которой вы ищете, - это найти размер файла, на который я верю. Чтобы установить переменную lSize no? Однако я не эксперт. – eatonphil