免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 8189 | 回复: 10
打印 上一主题 下一主题

请问一个程序里能有几个FILE *fp定义? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-08-21 17:21 |只看该作者 |倒序浏览
小弟在main函数里有个FILE *fp打开一个文本文件
然后在main函数里调用一个子函数 ,子函数里也有个FILE*fp 打开另一个文件
但是debug的时候子函数的的fp就报错了,不知道是不是不能这样定义?

论坛徽章:
0
2 [报告]
发表于 2008-08-21 17:24 |只看该作者
猜测是由于内存或者函数使用不当造成的,与 FILE * 对象数目无关。

论坛徽章:
0
3 [报告]
发表于 2008-08-21 17:30 |只看该作者
请问这个函数的定义有没有什么语法上的问题呢?头晕了都
char *openPsl(char *pslpath){
        FILE *fp;
        char pslText[900];
        char *p=pslText;

        if((fp=fopen(pslpath,"r"))==NULL) printf("PSL file open failed");
        do{
                *p=fgetc(fp);
                p++;
        }while(*p!=EOF);
        *p='\0';
        p=pslText;
        fclose(fp);
        return(p);
}

程序执行到do{
                *p=fgetc(fp);的时候 就报错 :Unhandled exception at 0x7c921095 in patrolapi.exe: 0xC0000005: Access violation writing location 0x10320023.

[ 本帖最后由 gm3000 于 2008-8-21 17:35 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2008-08-21 17:41 |只看该作者
p++了,但是p中没有东西,所以
while(*p!=EOF);这个地方应该有问题
改成这样
while(*(p-1)!=EOF);
试试

[ 本帖最后由 gawk 于 2008-8-21 17:43 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2008-08-21 18:01 |只看该作者
我改成这样char *openPsl(char *pslpath){
        FILE *fp;
        char pslText[900];
        char *p;
        p=pslText;

        if((fp=fopen(pslpath,"r"))==NULL) printf("PSL file open failed");
        do{
                *p=fgetc(fp);
                p++;
        }while(*(p-1)!=EOF);
        *(p-1)='\0';
        p=pslText;
        fclose(fp);
        return(p);
}

但是返还的字符不对 800多个字符就返回个     愧)

论坛徽章:
0
6 [报告]
发表于 2008-08-21 18:27 |只看该作者
原帖由 gm3000 于 2008-8-21 18:01 发表
我改成这样char *openPsl(char *pslpath){
        FILE *fp;
        char pslText[900];
        char *p;
        p=pslText;

        if((fp=fopen(pslpath,"r"))==NULL) printf("PSL file open failed");
        do{
                *p=fgetc(fp);
                p+ ...

你看看你打开的文件中有多少个字符,到800个了吗? 另外我觉得你这个程序应该加上指针的越界判断。

论坛徽章:
0
7 [报告]
发表于 2008-08-21 18:31 |只看该作者
FILE *只是声明了指针而已,你想要多少个就能有多少个

不过fopen()打开文件的个数是有限制的。。

论坛徽章:
0
8 [报告]
发表于 2008-08-21 19:34 |只看该作者
原帖由 gm3000 于 2008-8-21 18:01 发表
我改成这样char *openPsl(char *pslpath){
        FILE *fp;
        char pslText[900];
        char *p;
        p=pslText;

        if((fp=fopen(pslpath,"r"))==NULL) printf("PSL file open failed");
        do{
                *p=fgetc(fp);
                p+ ...

如果是返回用的话,肯定有问题,你在函数里面
char pslText[900];
这样申明,是临时变量
你改成
static char pslText[900];看看

论坛徽章:
0
9 [报告]
发表于 2008-08-21 22:28 |只看该作者
FILE *只是声明了指针而已,可以有多个

论坛徽章:
0
10 [报告]
发表于 2008-08-21 22:50 |只看该作者
明白了哈谢谢,要声明static char才行,不设置静态只是局部,返回不了,又学到了,谢谢!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP