【问题标题】:Reading lines out of a file and putting them into a string array从文件中读取行并将它们放入字符串数组
【发布时间】:2012-01-23 16:52:12
【问题描述】:

我想做的是能够从文件中读取一行并将其粘贴到字符串数组中。这是我到目前为止所拥有的,但它似乎不起作用。

...
char line [128];
char file [10][128];

plist = fopen("plist1.txt", "r");

while(fgets(line, sizeof line, plist) != NULL){
   file[i][0]= line;
   i++;
}

我尝试做file[i][0] = *line; 并且能够打印出每一行的第一个字符。这是做我想做的最好的方法吗?

此外,文本文件中的行数会有所不同,因此我希望我的数组具有可变长度而不是 10。

编辑:我尝试了下面列出的两种解决方案。两者都给我处理 strcpy 或 fgets 的分段错误。

1.  while (fgets(file[i], sizeof(file[i]), plist))
       i++;

2.  while (fgets(line, sizeof(line), plist)){
       strcpy(file[i], line);
       i++;
    }

【问题讨论】:

    标签: c arrays string multidimensional-array


    【解决方案1】:

    试试这个:

    while (fgets(file[i], sizeof(file[i]), plist))
        i++;
    

    或者

    while (fgets(line, sizeof(line), plist))
        strcpy(file[i], line);
    

    【讨论】:

    • 谢谢!!!我总是忘记它们是指针而不是实际值:/。愚蠢的错误总是让我着迷。
    • @user972276 我的心在流血。使用调试器。
    【解决方案2】:

    这是一个完全有效的解决方案,假设plist1.txt 每行包含一行文本。 fgets() 默认情况下还会在末尾包含一个换行符,您需要删除它。使用符号常量也是一个好主意,这样您以后可以根据需要轻松更改它们。

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #define BUF 128 /* can change the buffer size as well */
    #define TOT 10 /* change to accomodate other sizes, change ONCE here */
    
    int main(void) {
        char line[TOT][BUF];
        FILE *plist = NULL; 
        int i = 0;
        int total = 0;
    
        plist = fopen("plist1.txt", "r");
        while(fgets(line[i], BUF, plist)) {
            /* get rid of ending \n from fgets */
            line[i][strlen(line[i]) - 1] = '\0';
            i++;
        }
    
        total = i;
    
        for(i = 0; i < total; ++i)
            printf("%s\n", line[i]);
    
        return 0;
    }
    

    【讨论】:

    • 我的 fget 有问题。它给了我一个分段错误。
    • 您可以发布您正在使用的 plist1.txt 吗?这是我的:Hello\n Hello world\n Hi\n 测试
    • @user972276 可能你的 TOT 太大了
    • 感谢您的解决方案!
    【解决方案3】:

    【讨论】:

    • 我用过。我的问题是我的数组中的每个元素都指向变量行。所以我数组中的所有元素都指向同一个字符串。直到第一次发表评论,我才意识到这是我的问题。感谢您的帮助!只是一个愚蠢的错误......
    猜你喜欢
    • 2013-12-18
    • 2018-12-14
    • 1970-01-01
    • 2021-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多