日期:2014-05-16  浏览次数:20749 次

跪求linux c高手
我编了一段c程序 功能是读取文件内容放数组里 然后按列依次打印   程序如下:

#include <stdio.h>
#include <string.h>

#define MAXLINE 1000
main()
{
FILE *fp;

int i = 0, j = 0,k = 0;
int p;
int m;
int u;
int o;
int q;
int n;
int y;
char s[MAXLINE][9][100];
char line[100][40];
int except[100];
char enter;

fp = fopen("5.txt", "r");
if(fp == NULL)
{
printf("文件读取失败!\n");

else 
{

while( ! feof(fp) )
{
fscanf(fp,"%[^\n]\n",line[i]);        //按行读取文件并放到数组line[i]里
i++;
y=i;
}

for(i=0;i<y;i++)
{
sscanf(line[i], "%s%s%s%s%s%s%s%s%s", s[i][0], s[i][1], s[i][2], s[i][3], s[i][4], s[i][5],s[i][6],s[i][7],s[i][8]);                    //把数组line[i]里的内容按字符串分开放到数组s里
}
fclose(fp);

//从这往上都没问题  
//但加上下边的for循环就出错了 编辑完运行就出现 “段错误 (core dumped)”我这哪错了呀? 该怎么改呀?
//我的文件下边有 它不是标准成行成列的文件 要求去掉不表准的 下边的for循环我就是为了读取不标准的那行所在的行数
for(i=0;i<y;i++)
{
if(strlen(s[i][0])<10)
{
except[m]=i;
m++;u=m;
}
}


//我需要知道不标准的行数 下面的程序我就知道怎么改了
// for(k=0;k<9;k++)
// {
// printf("第%d列\n",k+1);
// for(j=0;j<p;j++)
// {
// printf("%s\n",s[j][k]);
// }
// }
}
}




5.txt文件内容如下:

总用量 20
-rw-r--r-- 1 zhangzw users  188  9月  1 02:50 2.txt
-rwxr-xr-x 1 zhangzw users   57  8月 31 06:29 me.txt
drwxrwxrwx 2 zhangzw users 4096  8月 31 08:50 zzw
总用量 64
-rw-r--r-- 1 zhangzw users 1053  8月 31 08:50 1.txt
-rwxr-xr-x 1 zhangzw users   95  8月 31 05:56 4.11.sh
-rwxr-xr-x 1 zhangzw users   57  8月 31 03:17 4.2.sh
-rwxr-xr-x 1 zhangzw users   82  8月 31 02:50 4.4.sh
总用量 80
-rw-r--r-- 1 zhangzw users  582 11月 17 15:52 11.c
-rw-r--r-- 1 zhangzw users  257 11月 17 17:39 12.c
-rw-r--r-- 1 zhangzw users  986 11月 11 11:11 6.c
-rw-r--r-- 1 zhangzw users 1317 11月 11 15:41 7.c
总用量 36
-rw-r--r-- 1 zhangzw users  118 11月 13 14:53 0.txt
-rwxr-xr-x 1 zhangzw users  169  9月  2 01:50 1.sh
-rw-r--r-- 1 zhangzw users 1681 11月 11 16:17 1.txt





------解决方案--------------------
帮顶学习!
------解决方案--------------------
低级错误,except[m]你用之前没有初始化m=0,用的时候超出里范围,就段错误了。
------解决方案--------------------
学习了