Мне дали файл .txt со специфической структурой c: в каждой строке есть строка с 5 символами, но со случайным количеством строк, и мы должны прочитать файл и сохранить его, как захотим. Я пытался сделать это с помощью связанного списка, и он работал просто отлично, но по мере увеличения размера файла время, которое требовалось для выполнения, было слишком длинным. С тех пор я пытался сохранить строки в массив строк, поэтому все будет храниться в памяти непрерывно. При выполнении я получаю ошибку ошибки сегментации, и я понятия не имею, почему. Код выглядит следующим образом:
int nLines (char *path)
{
int answer = 0;
FILE* fp;
fp = fopen(path,"r");
char line[6];
while (fgets(line, sizeof(line),fp))
{
answer++;
}
return answer;
}
int main (int argc, char *argv[])
{
FILE* fp;
fp = fopen(argv[1], "r");
int numberLines = nLines(argv[1]);
char **storage = malloc(numberLines * 6 * sizeof(char));
if(storage != NULL)
{
int i = 0;
char line [6];
while (fgets(line, sizeof(line),fp))
{
strcpy(storage[i], line);
i++;
}
}
free(storage);
}
Первая функция должна возвращать количество строк в файле. С помощью этой информации я пытаюсь выделить память, равную количеству строк * размеру каждой строки, так как я знаю заранее это значение. Я представляю себе, что проблема исходит из строки:
char **storage = malloc (numberLines * 6 *sizeof(char));
Я давно не трогал C, и я немного подзабыл с целыми указателями и воспоминаниями. Может кто-нибудь помочь, пожалуйста. Спасибо!