|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
10x7
###.###
#DBBBE.
#D.A.E#
#D.A.E#
#D.A.E#
#D.A.E#
.DCCCE#
#D.G.E#
#FFGHH.
#.#.#.#
文件内容如上,想要取得最上面的10 和 7 两个数字
- char *rowstr=NULL;
- int m=0;
- do{
- rowstr[m]=fgetc(fp);
- m++;
- }while(fgetc(fp)!='x');
- printf("%s\n",rowstr);
复制代码
尝试过这样写代码,但是会报错Segmentation fault (core dumped),不太清楚是字符串不能逐个赋值吗?还是哪里出错了
本帖最后由 jackz007 于 2022-11-13 09:47 编辑
程序运行时出现 [b] "Segmentation fault (core dumped)" 的直接原因是指针 rowstr 在还没有指向有效内存地址的时候就被拿来使用。
- #include <stdio.h>
- #include <stdlib.h>
- int main(void)
- {
- FILE * fp ;
- char c , * rowstr = NULL , fn[] = "data.dat" ;
- int e = 0 , m = 0 ;
- if((fp = fopen(fn , "r"))) {
- rowstr = (char *) malloc(512) ; // 字符串指针必须先指向有效的内存地址才可以使用
- do {
- c = fgetc(fp) ;
- if(c >= '0' && c <= '9') {
- rowstr[m ++] = c ;
- e ++ ;
- } else {
- if(e) {
- rowstr[m ++] = ' ' ;
- e = 0 ;
- }
- }
- } while(! feof(fp)) ;
- rowstr[m] = '\0' ;
- fclose(fp) ;
- printf("%s\n" , rowstr) ;
- free(rowstr) ;
- } else {
- fprintf(stderr , "cann't open file %s\n" , fn) ;
- }
- }
复制代码
这个代码可以把文件 "data.dat" 中所有的整型数都搜罗到字符串 rowstr 中,整型数之间被一个空格字符分隔。
|
|