将文件逐行读入C中的数组

时间:2016-02-08 19:51:08

标签: c arrays pointers io

我这样做有很多困难!我所做的是获取第一行来初始化一个指针数组,然后想要将这些块指向包含文本文档中的字符串的变量。然而;即使我将所有值读入数组,它们都指向同一个变量,该变量随着文件的读取而变化。有没有办法可以将这些值复制到数组中而不会在读取文件时指向更改的行?

int main(void){
FILE * fp;
char line[256];
int i = 0;
int digit = 0;

fp = fopen("testfile","r");

if(fp == NULL){
    printf("Cannot Open File");
}
fgets(line,sizeof(line),fp);
digit = atoi(line);
printf("digit = %d\n",digit);
char *rest[digit];
while(!feof(fp)){
    while (i < digit){
        fgets(line,sizeof(line),fp);
        fgets(line,sizeof(line),fp);
        printf("line = %s",line);
        char arr[sizeof(line)+1];
        strcpy(arr,line);
        rest[i] = arr;
        printf("restaurant = %s",rest[i]);
        i++;
    }

文本文件如下:

6
Outback Steakhouse
Red Robin
Max & Erma’s
Chipotle
Panera
BW3
8
Stephanie 5 3 2 4
Chris 4 6 5 1
Peter 5 2 4 1
Josh 1 4 3 6
Jessica 5 2 3 4
Al 6 4 2 3
Adam 5 1 3 2
Eric 1 4 3 5

1 个答案:

答案 0 :(得分:0)

您需要将值复制到动态分配的内存中。 strdup会做的。替换:

    char arr[sizeof(line)+1];
    strcpy(arr,line);
    rest[i] = arr;

使用:

    rest[i] = strdup (line);

您也可以拨打fgets两次。

此外,当行太长时,它不会终止为零。为了确保安全,请始终在line的末尾指定零。