#include <stdio.h>
#include <stdlib.h>
int count_arr(FILE *file)
{
int c,count=0;
//FILE *file;
//file = fopen("test.txt", "r");
if (file) {
while ((c = getc(file)) != EOF){
putchar(c);
++count;}
fclose(file);
}
return count;
}
void make_arr (FILE *file, char arr[]){
int c,n=0,count=0;
char ch;
//FILE *file;
//file = fopen("test.txt", "r");
if (file) {
while ((c = getc(file)) != EOF){
ch = (char)c;
arr[n]=ch;
++n; }
fclose(file);
}
}
int main(){
FILE *file;
int n;
//scanf("%c",&file_name);
file = fopen("test.txt","r");
int count = count_arr(file);
char arr [count];
make_arr(file, arr);
for(n=0; n<count;++n) printf("%c",arr[n]);
}
Пока это все, что у меня есть для моего кода. Я знаю, что делаю это совершенно неправильно. Когда я печатаю массив символов, он печатает случайный мусор ... Я пытаюсь закодировать функцию «make_arr», которая передает массив, который хранится с символами из файла. Любая помощь будет оценена!Как создать массив символов из файла?
Вы можете получить размер файла 'fseek (файл, 0, SEEK_END); int size = ftell (файл); fseek (файл, 0, SEEK_SET); 'затем выделить память и прочитать весь файл' char * arr = malloc (size); fread (arr, размер, 1, файл); '. Не забудьте закрыть файл и освободить свой буфер. – Cyclonecode
код открыл файл в main(), поэтому он должен быть закрыт в main() не в обеих вспомогательных функциях. main() может легко перемотать файл так, чтобы make_arr() мог прочитать его снова, используя функцию функции fseek (файл, 0, SEEK_SET) сразу после вызова count_arr() – user3629249
с использованием fseek (файл, 0, SEEK_END); ftell (файл) даст количество байтов в файле в двух строках кода и будет значительно быстрее, чем чтение байта файла байтом. то функция count_arr() может быть устранена. – user3629249