2012-01-23 42 views
1

我想要做的是能够从文件中读取一行并将其粘贴到一个字符串数组中。这是我迄今为止的,但它似乎并没有工作。从一个文件中读取行并将它们放入一个字符串数组中

... 
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

试试这个:

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

或者

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

谢谢!我总是忘记他们是指针而不是实际值:/。愚蠢的错误总是让我失望。 – user972276

+0

等一下,它不起作用。给我一个分段错误 – user972276

+0

@ user972276我的心在流血。使用调试器。 – cnicutar

1

这里是一个完全可行的解决方案,假设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; 
} 
+0

我有一个fgets的问题。它给了我一个分段错误。 – user972276

+0

你可以发布你正在使用的plist1.txt吗?这里是我的: 你好\ n Hello world \ n 你好\ n 测试 – Ambidextrous

+0

@ user972276可能你的TOT太大 – echo

相关问题