从文件中读取行并将它们放入字符串数组中

时间:2012-01-23 16:52:13

标签: c arrays string multidimensional-array

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

...
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++;
    }

3 个答案:

答案 0 :(得分:4)

试试这个:

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

可选地

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

答案 1 :(得分: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;
}

答案 2 :(得分:0)