| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2200 人关注过本帖
标题:C语言 文件指针 (*fp1)._base CXX0030: Error: expression cannot be evalu ...
只看楼主 加入收藏
潋儿
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2015-5-20
结帖率:0
收藏
已结贴  问题点数:20 回复次数:12 
C语言 文件指针 (*fp1)._base CXX0030: Error: expression cannot be evaluated
int main()                    
{
    printf("正在启动系统文件请稍候~~~~\n");
    FILE *fp1=NULL;
    int i;
    foodNode *temp,*head,*headi;
    //fp1=fopen("D:\\data.txt","rw+");
    if((fp1=fopen("E:\\date.txt","wr+"))==NULL)
     { printf("****系统文件启动错误!!!!****\n");
       return 0;
     }
    head=readFile(fp1);
     printf("**=^^=**系统文件启动成功,启动系统**=^^=**\n");
搜索更多相关主题的帖子: expression cannot return C语言 
2015-05-20 23:10
潋儿
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2015-5-20
收藏
得分:0 
运行时并没有输出“系统文件启动错误”的信息
2015-05-20 23:11
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:20 
Error: expression cannot be evaluated
错误:表达式无法被求值

授人以渔,不授人以鱼。
2015-05-20 23:18
潋儿
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2015-5-20
收藏
得分:0 
回复 3楼 TonyDeng
为什么会这样啊?
2015-05-20 23:23
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用潋儿在2015-5-20 23:23:30的发言:

为什么会这样啊?

不知道。要用GetLastError()获取错误码才知道具体的原因。

授人以渔,不授人以鱼。
2015-05-20 23:24
潋儿
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2015-5-20
收藏
得分:0 
回复 5楼 TonyDeng
好的,我试一下,谢谢您了
2015-05-20 23:30
潋儿
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2015-5-20
收藏
得分:0 
回复 5楼 TonyDeng
上网查了一下,没有找到怎么调用getError的信息,您可以告诉我一下怎么调用这个函数吗
2015-05-20 23:44
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
那是系统平台的函数,在Windows系统中,必须包含Windows.h头,在别的平台中不知道。你要明白原理,凡是与磁盘文件有关的,归在系统支持的文件格式范畴中,是操作系统提供的接口,打开和读写文件,都是操作系统作中介的,除了写驱动程序,我们没有直接存取硬件,操作能否成功、以及什么原因导致不成功,都是操作系统用返回错误码形式(这就是C/C++程序所谓的main()函数返回码的作用)通知调用者的。不同操作系统,其定义的错误码意义不同,所以这必须看具体的操作系统资料,在Win32 API中,有完整的函数序列返回明确的错误信息。

在Windows中,由于操作系统是微软的产品,它本身也提供C/C++编译器,两者是深度嵌合的,其函数库中,另外有一套可以返回错误码的文件函数,打开文件的那个函数就是fopen_s(),其返回値即是系统错误码,不用GetLastError()就能获得,这个扩展功能是ANSI标准库不提供的,用fopen()的返回值是否NULL来判断出错,只能知道错或成功,但错误的原因是无法知道的。


[ 本帖最后由 TonyDeng 于 2015-5-20 23:59 编辑 ]

授人以渔,不授人以鱼。
2015-05-20 23:55
潋儿
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2015-5-20
收藏
得分:0 
回复 8楼 TonyDeng
Loaded 'ntdll.dll', no matching symbolic information found.
Loaded 'C:\Windows\System32\kernel32.dll', no matching symbolic information found.
Loaded 'C:\Windows\System32\KernelBase.dll', no matching symbolic information found.
我这样算是获得了错误信息吗
2015-05-21 00:06
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
没有。你先不要直接在if()中赋値,单独写一句fp1=fopen()的语句,然后紧接在下面printf("%d\n",GetLastError())观察错误码(记得包含Windows.h)。这个处理未必奏效,因为程序可能无法运行到后面这一行就被挂起了。而且,看这个错误的信息,似乎是FILE*结构的赋値出了问题。我不知道这个错误怎么来的,要换我调试,就是变换打开文件的方式,找到不出错的打开办法。这种外部设备问题,原因的可能性太多了,诸如驱动器不能读取、文件权限、文件共享等等,都有可能。

授人以渔,不授人以鱼。
2015-05-21 00:14
快速回复:C语言 文件指针 (*fp1)._base CXX0030: Error: expression cannot be ...
数据加载中...
 
   



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

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