1 #include <stdio.h> 2 3 #define BUFSIZE 40 4 5 int scanline(FILE *fp) 6 { 7 char line[BUFSIZE] = ""; 8 int lines = 0; 9 10 while(!feof(fp)) 11 { 12 fgets(line, BUFSIZE, fp); 13 lines++; 14 } 15 16 return lines; 17 } 18 19 int main(int argc, char **argv) 20 { 21 FILE *fp; 22 int lines; 23 int i, j = 0; 24 char *line[BUFSIZE]; 25 26 for(i=0; i<BUFSIZE; i++) 27 line[i] = ""; 28 29 fp = fopen("test.txt", "r"); 30 if(!fp) 31 { 32 printf("read file error/n"); 33 return; 34 } 35 36 lines = scanline(fp); 37 38 39 for(i=0; i<lines-1; i++) 40 { 41 // if(!feof(fp)) 42 fgets(line[i], BUFSIZE, fp); 43 } 44 45 for(i=0; i<lines-1; i++) 46 { 47 printf("%s/n", line[i]); 48 } 49 50 fclose(fp); 51 52 return 0; 53 } 上面这个程序是正确的,但是如果将指针数组初始化的地方注释掉,在fedora系统下用gcc编译器成功编译,运行时会出现段错误。