【问题标题】:C - fgets and store all lines in an array [duplicate]C - fgets并将所有行存储在一个数组中[重复]
【发布时间】:2017-09-16 14:54:06
【问题描述】:

首先,如果另一个主题与我的问题相关,我很抱歉,但我无法找到合适的主题。

我会尽量说清楚。

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

我使用 fgets 来获取所有行,我将 s“字符串”传递给 char$ []

代码:

#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;
}

我的 s 变量很好,如果我每次循环都打印它,那很好。 如果我在循环内打印lignes[sizeLignes],那也很好。 如果我尝试将值打印在外面...就像保留最后 4 个单词或类似的东西。

有什么想法吗?

您需要更多信息吗?

提前致谢,

伊齐奥

【问题讨论】:

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

标签: c arrays file fgets


【解决方案1】:

您应该使用 strcpy(lignes[sizeLignes], s) 而不是 lignes[sizeLignes] = s。 您可能确实也使用 strcpy_s 。您还应该为字符串分配内存。 所以我推荐下一个代码

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

在不需要时释放动态内存。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-23
    • 1970-01-01
    • 2021-06-10
    • 2015-02-02
    • 1970-01-01
    • 2021-02-22
    • 1970-01-01
    • 2021-02-15
    相关资源
    最近更新 更多