Chinaunix

标题: 请问一个程序里能有几个FILE *fp定义? [打印本页]

作者: gm3000    时间: 2008-08-21 17:21
标题: 请问一个程序里能有几个FILE *fp定义?
小弟在main函数里有个FILE *fp打开一个文本文件
然后在main函数里调用一个子函数 ,子函数里也有个FILE*fp 打开另一个文件
但是debug的时候子函数的的fp就报错了,不知道是不是不能这样定义?
作者: langue    时间: 2008-08-21 17:24
猜测是由于内存或者函数使用不当造成的,与 FILE * 对象数目无关。
作者: gm3000    时间: 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 编辑 ]
作者: gawk    时间: 2008-08-21 17:41
p++了,但是p中没有东西,所以
while(*p!=EOF);这个地方应该有问题
改成这样
while(*(p-1)!=EOF);
试试

[ 本帖最后由 gawk 于 2008-8-21 17:43 编辑 ]
作者: gm3000    时间: 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多个字符就返回个     愧)
作者: lukeden    时间: 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个了吗? 另外我觉得你这个程序应该加上指针的越界判断。
作者: Kevin_zqw    时间: 2008-08-21 18:31
FILE *只是声明了指针而已,你想要多少个就能有多少个

不过fopen()打开文件的个数是有限制的。。
作者: gawk    时间: 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];看看
作者: 0vk0    时间: 2008-08-21 22:28
FILE *只是声明了指针而已,可以有多个
作者: gm3000    时间: 2008-08-21 22:50
明白了哈谢谢,要声明static char才行,不设置静态只是局部,返回不了,又学到了,谢谢!!
作者: gawk    时间: 2008-08-21 22:59
原帖由 gm3000 于 2008-8-21 22:50 发表
明白了哈谢谢,要声明static char才行,不设置静态只是局部,返回不了,又学到了,谢谢!!

不光static
malloc也可以的,




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2