我有一个文本文件,我希望逐行阅读并将这些行放入数组中。
后面的代码片段在编译时出错:
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
有任何帮助吗? 感谢
答案 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++;