C:将文件读入数组

时间:2009-05-04 19:32:15

标签: c

我有一个文本文件,我希望逐行阅读并将这些行放入数组中。

后面的代码片段在编译时出错:

FILE *f;
char line[LINE_SIZE];
char *lines;
int num_righe;

f = fopen("spese.dat", "r");

if(f == NULL) {
    f = fopen("spese.dat", "w");
}

while(fgets(line, LINE_SIZE, f)) {      
    num_righe++;
    lines = realloc(lines, (sizeof(char)*LINE_SIZE)*num_righe);
    strcpy(lines[num_righe-1], line);
}

fclose(f);

错误是:

spese.c:29: warning: assignment makes integer from pointer without a cast
spese.c:30: warning: incompatible implicit declaration of built-in function ‘strcpy’
spese.c:30: warning: passing argument 1 of ‘strcpy’ makes pointer from integer without a cast

有任何帮助吗? 感谢

4 个答案:

答案 0 :(得分:5)

尝试:

FILE *f;
char line[LINE_SIZE];
char **lines = NULL;
int num_righe = 0;

f = fopen("spese.dat", "r");

if(f == NULL) {
        f = fopen("spese.dat", "w");
}

while(fgets(line, LINE_SIZE, f)) {              
        num_righe++;
        lines = (char**)realloc(lines, sizeof(char*)*num_righe);
        lines[num_righe-1] = strdup(line);
}

fclose(f);

答案 1 :(得分:2)

我认为这是一个代码snipet,因此,我想你是alredy包括string.h

strcpy定义为:

  char * strcpy ( char * destination, const char * source );

 strcpy(lines[num_righe-1], line);

lines [num_righe-1]是char,而不是char *

所以它应该是

strcpy(lines + (num_righe-1), line);

正如慷慨写道,看起来你正试图让线条成为一个字符串数组。如果是这样,你对行的定义是错误的。

另外,不要忘记,你应该检查realloc是不会返回NULL。

lines = realloc(lines, (sizeof(char)*LINE_SIZE)*num_righe);

if (!lines) //MUST HANDLE NULL POINTER!!

/* string copy code here*/

答案 2 :(得分:1)

lines是指向字符的指针,即单个字符串。你希望它是一个字符串数组。为此,它应该是char **lines;

答案 3 :(得分:1)

您可以使用fscanf来做您想做的事。

fscanf(f, "%s\n", line[index]);
index++;