| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2306 人关注过本帖, 1 人收藏
标题:从一个文件读取数据到二维数组中,下面的程序错在哪?
只看楼主 加入收藏
khaz
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:130
专家分:188
注 册:2011-4-21
结帖率:77.78%
收藏(1)
已结贴  问题点数:20 回复次数:5 
从一个文件读取数据到二维数组中,下面的程序错在哪?
程序代码:
#include<stdio.h>
int main(int argc,char *argv[]){
        if(argc!=2){
        fprintf(stderr,"usage:%s filename\n",argv[0]);
        exit(1);
        }

        FILE *f1;
        char a1[3][3];

        f1=fopen(argv[1],"r");
        if(f1==NULL){
        fprintf(stderr,"%s: file no found\n",argv[1]);
        exit(1);
        }

        char *str1=(char *)malloc(100);
        int i=0,ret;
        while(fgets(str1,100,f1)!=NULL){
        if((ret=sscanf(str1,"%s %s %s",&a1[i][0],&a1[i][1],&a1[i][2]))<3){
        fprintf(stderr,"sscanf() call error,ret=%d\n",ret);
        exit(1);
        }
        i++;
        }

          for(i=0;i<3;i++){
                fprintf(stdout,"%s %s %s\n",a1[i][0],a1[i][1],a1[i][2]);
          }
        exit(0);
}
[view@localhost c]$cat 1.txt
1 a b
2 c d
3 e f
[view@localhost c]$cc -o test1 test1.c
[view@localhost c]$./test1 1.txt
Segmentation fault (core dumped)
(gdb) where
#0  0x005dfc7b in strlen () from /lib/tls/libc.so.6
#1  0x005b4155 in vfprintf () from /lib/tls/libc.so.6
#2  0x005b940f in fprintf () from /lib/tls/libc.so.6
#3  0x08048671 in main ()
(gdb)


[ 本帖最后由 khaz 于 2011-4-23 15:11 编辑 ]
搜索更多相关主题的帖子: 二维 
2011-04-23 15:10
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:15 
你怎么能往 char 里面读 string 呢?
2011-04-23 15:16
khaz
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:130
专家分:188
注 册:2011-4-21
收藏
得分:0 
以下是引用voidx在2011-4-23 15:16:49的发言:

你怎么能往 char 里面读 string 呢?
有道理,可是程序应该怎么改呢?对了 文件1.txt里的值是特例 1.txt是可以有字符串的

[ 本帖最后由 khaz 于 2011-4-23 15:24 编辑 ]
2011-04-23 15:23
machine_of_a
Rank: 2
等 级:论坛游民
帖 子:8
专家分:36
注 册:2011-4-19
收藏
得分:5 
程序代码:
#include<stdio.h>
int main(int argc,char *argv[]){
  if(argc!=2){
    fprintf(stderr,"usage:%s filename\n",argv[0]);
    exit(1);
  }
  FILE *f1;
  char a1[3][3];
  f1=fopen(argv[1],"r");
  if(f1==NULL){
    fprintf(stderr,"%s: file no found\n",argv[1]);
    exit(1);
  }
  char *str1=(char *)malloc(100);
  int i=0,ret;
  while(fgets(str1,100,f1)!=NULL){
    printf ("%s\n", str1);
    if((ret=sscanf(str1,"%s %s %s",&a1[i][0],&a1[i][1],&a1[i][2]))<3){
      fprintf(stderr,"sscanf() call error,ret=%d\n",ret);
      exit(1);
    }
    i++;
  }
  for(i=0;i<3;i++){
    // 这句输出字符,应该使用%c
    fprintf(stdout,"%c %c %c\n",a1[i][0],a1[i][1],a1[i][2]);
  }
  exit(0);
}
for(i=0;i<3;i++){
    // 这句输出字符,应该使用%c
    fprintf(stdout,"%c %c %c\n",a1[i][0],a1[i][1],a1[i][2]);
  }
 
2011-04-23 15:31
khaz
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:130
专家分:188
注 册:2011-4-21
收藏
得分:0 
解决了 谢谢voidx提醒 红色是增加和修改的地方。
#include<stdio.h>
int main(int argc,char *argv[]){
        if(argc!=2){
        fprintf(stderr,"usage:%s filename\n",argv[0]);
        exit(1);
        }

        FILE *f1;
        char *a1[3][3];
        int k,m;
        for(k=0;k<3;k++)
                for(m=0;m<3;m++){
        a1[k][m]=(char *)malloc(10);
        }

        f1=fopen(argv[1],"r");
        if(f1==NULL){
        fprintf(stderr,"%s: file no found\n",argv[1]);
        exit(1);
        }

        char *str1=(char *)malloc(100);
        int i=0,ret;
        while(fgets(str1,100,f1)!=NULL){
        if((ret=sscanf(str1,"%s %s %s",a1[i][0],a1[i][1],a1[i][2]))<3){
        fprintf(stderr,"sscanf() call error,ret=%d\n",ret);
        exit(1);
        }
        i++;
        }

          for(i=0;i<3;i++){
                fprintf(stdout,"%s %s %s\n",a1[i][0],a1[i][1],a1[i][2]);
          }
        exit(0);
}
[view@localhost c]$cc -o test1 test1.c
[view@localhost c]$./test1 1.txt
1 a b
2 c d
3 e f


[ 本帖最后由 khaz 于 2011-4-23 15:35 编辑 ]
2011-04-23 15:33
khaz
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:130
专家分:188
注 册:2011-4-21
收藏
得分:0 
4楼的 我的文件1.txt是可以有2个字母以上的单词的,所以程序还是要把文件中的内容当作字符串来看。不过还是谢谢了
2011-04-23 15:37
快速回复:从一个文件读取数据到二维数组中,下面的程序错在哪?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015445 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved