Чтение файла построчно и сохранение его в массив не работает
Здесь я хочу прочитать текстовый файл с номерами телефонов. Например:
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