Я хочу прочитать содержимое текстового файла в массиве символов в C. Должны быть сохранены новые строки.Чтение всего текстового файла в массив символов в C
Как это сделать? Я нашел некоторые C++-решения в Интернете, но не только C-решение.
Edit: У меня есть следующий код сейчас:
void *loadfile(char *file, int *size)
{
FILE *fp;
long lSize;
char *buffer;
fp = fopen (file , "rb");
if(!fp) perror(file),exit(1);
fseek(fp , 0L , SEEK_END);
lSize = ftell(fp);
rewind(fp);
/* allocate memory for entire content */
buffer = calloc(1, lSize+1);
if(!buffer) fclose(fp),fputs("memory alloc fails",stderr),exit(1);
/* copy the file into the buffer */
if(1!=fread(buffer , lSize, 1 , fp))
fclose(fp),free(buffer),fputs("entire read fails",stderr),exit(1);
/* do your work here, buffer is a string contains the whole text */
size = (int *)lSize;
fclose(fp);
return buffer;
}
я получаю одно предупреждение: предупреждение: назначение делает указатель из целого числа без броска. Это находится на линии size = (int)lSize;
. Если я запустил приложение, он будет segfaults.
Обновление: Приведенный выше код работает сейчас. Я нашел segfault, и я задал еще один вопрос. Спасибо за помощь.
Возможный дубликат [Самый простой способ получить содержимое файла в C] (http://stackoverflow.com/questions/174531/easiest-way-to-get-files-contents-in-c) –
Использование fseek(), чтобы получить размер файла, ограничивает только чтение реальных файлов на диске. Использование этого означает, что вы не можете читать из канала (например, стандартный ввод), именованный канал, устройства или сетевые потоки. См. Ссылку в комментарии выше. [Самый простой способ получить содержимое файла в C] (http://stackoverflow.com/questions/174531) – anthony