Чтение файла построчно и сохранение его в массив не работает

Здесь я хочу прочитать текстовый файл с номерами телефонов. Например:

01011112222
01027413565
01022223333

Я хочу сохранить эти номера телефонов в массиве для последующего использования. Здесь ниже мой код:

#include <stdio.h>
#include <stdlib.h>
int main(){
   FILE *fl = NULL;
   char* phoneNums[10];

   int i = 0;
   fl = fopen("phoneNum.txt", "r");

   if(fl != NULL){
      char strTemp[14];

      while( !feof(fl) ){
        phoneNums[i] = fgets(strTemp, sizeof(strTemp), fl); 
        i++;
      }
      fclose(fl);
   }
   else{
      printf("File does not exist");
   }

   return 0;
}

Проблема в том, что всякий раз, когда fgets называется, он возвращает ту же ссылку strTemp,

Таким образом, каждый раз, когда он проходит через цикл, он меняет все значение на последнее значение в phoneNums массив.

Я пытался объявить char strTemp[14] внутри while цикл, но это не сработало.

На этом этапе, что я мог попытаться решить эту проблему?

Благодарю.

2 ответа

Решение

Сделайте следующие изменения, чтобы получить точный результат.

Измените переменную strTemp на переменную-указатель.

 char *strTemp;

Внутри пока выделяют динамическую память для переменной.

 strTemp=malloc(14);
 phoneNums[i]=fgets(strTemp,14,fl);

Если вам это нравится, он будет каждый раз создавать новую память, поэтому значение будет храниться в другом месте. Таким образом, он не может перезаписать в том же месте.

Надеюсь, что это поможет вам

#include <stdio.h>
#include<string.h>
#include <stdlib.h>
int main(){
    FILE *fl = NULL;
    char    phoneNums[3][14]; // you didn't allocate memory here. i am using static memory(for 3 phone numbers)
    int i = 0,j;
    fl = fopen("phoneNum.txt", "r");

    if(fl != NULL){
            char strTemp[14];

            while( fgets(strTemp, sizeof(strTemp), fl) ){
                    strcpy(phoneNums[i],strTemp); // you need to string copy function to copy one string to another string
                    i++;
            }
            fclose(fl);
    }
    else{
            printf("File does not exist");
    }
    for(j=0;j<i;j++) // i am printing the array content
            printf("%s\n",phoneNums[j]);

    return 0;
}

Здесь динамическое распределение памяти для char *phoneNums[14];

pnoneNums=(char **)malloc(14*n); // where n is the numbers of phone numbers
Другие вопросы по тегам