这是我与C的第一年,所以我有点失落。
我有这个功能:
void read(char** lines){
FILE *fpointer = fopen("input1.txt","r");
char *p_input = (char*) malloc(sizeof(char)*200);
int i,len;
i=0;
lines = malloc(sizeof(char*));
while( fgets(p_input,200,fpointer) ){
len = strlen(p_input);
char temp[len];
strcpy(temp,p_input);
lines[i] = temp;
i++;
}
}
并在主要:
int main(){
char **lines;
read(lines);
return 0;}
当我尝试从数组中打印内容时,我会遇到错误并且代码会停止,例如:
printf("%s\n",lines[0]);
你能告诉我出了什么问题。
答案 0 :(得分:0)
lines = malloc(sizeof(char*));
...
lines[i] = temp;
这是错误的,你没有足够的空间来指向char
的指针数组(你需要知道要保留的行数)
更改为
char **read(void) {
size_t n = file_lines;
char **lines = malloc(sizeof(char*) * n);
...
return lines;
}
int main(void) {
char **lines;
lines = read();
return 0;
}
如果你不知道前面的行数,你可以在realloc
循环的每次迭代中使用while
。
char **read(void) {
...
char **lines = NULL;
char **tmp;
...
while (fgets(p_input,200,fpointer)) {
...
tmp = realloc(lines, sizeof(char *) * (i + 1));
if (tmp != NULL) {
lines = tmp;
} else {
return NULL;
}
lines[i] = temp;
i++;
}
return lines;
}
int main(void) {
char **lines;
lines = read();
if (lines == NULL) {
perror("read");
exit(EXIT_FAILURE);
}
return 0;
}