2017-09-16 83 views
0

首先,如果另一个主题与我的问题有关,我很抱歉,但我找不到适合的问题。C - fgets并将所有行存储在数组中

我会尽量清楚。

我正在实现一个课程项目,它需要将约10个条目文本文件保存在一个数组中,然后处理数据。 (治疗不是问题)

我用fgets来获取所有行,他们我通过的 “串” 到字符$ []

代码:

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

int main(int* argc, char* argv[]){ 
    char* c = "./example.txt"; 
    char s[500]; 

    char* lignes[100]; 
    int sizeLignes = 0; 

    printf("%s \n\n", c); 

    FILE* myFile = NULL; 
    myFile = fopen(c, "r"); 

    if (myFile != NULL){ 
     int n; 
     while (fgets(s, 500, myFile) != NULL){ 
      printf("%d \n\n", sizeLignes); 
      lignes[sizeLignes] = s; 
      printf("%s", lignes[sizeLignes]); 
      sizeLignes++; 
     } 

     printf("%s", lignes[1]); 
     printf("%s", lignes[2]); 
     printf("%s", lignes[3]); 

    }else{ 
     printf("Wrong file"); 
    } 
    fclose(myFile); 
    return 0; 
} 

我的小号VAR是好的,如果我打印每一个循环,这是很好的。 如果我在循环内打印lignes[sizeLignes],那也不错。 如果我尝试在外面打印这个值,就放置它......就像保留4个最后的单词或类似的东西。

有什么想法?

你需要更多信息吗?

由于提前,

Izio

+0

您需要将字符串复制到数组中。你只在数组中存储指向's'的指针,然后在下一次循环迭代中覆盖's'。 – pstrjds

回答

0

应使用的strcpy(法分[sizeLignes],S)代替法分[sizeLignes] = S。 你的确可以使用strcpy_s。你也应该为字符串分配内存。 所以我建议的下一个代码

lignes[sizeLignes] = malloc(500); 
strcpy(lignes[sizeLignes], s); 

免费的动态内存时,将不需要它。

相关问题