C++小问题

jinye_kim 2009-03-27 08:25:54
#include <iostream>
using namespace std;

main()
{
char ch[100];
FILE * p = fopen("a.txt","r");
for(int i = 0; i < 6; i++)
{
fscanf(p,"%s",ch);
if(i > 4) cout<<ch<<endl;
}
fclose(p);
}

这段程序在vc中编译调试没有任何问题,但要运行生成的exe文件会报iostream!=null的错误
请高手指教,谢谢
...全文
131 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
jinye_kim 2009-03-29
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zhangjundriver 的回复:]
明确指出你的文件的路径,在在vs下面运行,是项目默认的目录是项目的目录就是包含main函数的文件那个目录,但单独运行exe文件的时候,默认的目录就是项目目录下面的debug目录了。目录改变了,已经不是你的那么项目目录了。要使你的程序运行没有错误,应该指出你文件的绝对路径,怎么运行都不会错。我在实习的时候碰到过这个问题,当时我痛苦了很久啊。
[/Quote]

绝对路径是什么?
jinye_kim 2009-03-29
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 muyejingfeng100 的回复:]
C/C++ code
#include <iostream>
#include <stdio.h>
using namespace std;

int main(void)
{
char ch[100];
FILE * p = fopen("d:\\data.txt","r");
if (p!=NULL)
{
for(int i = 0; i < 6; i++)
{
fscanf(p,"%s",ch);
if(i > 4)
cout <<ch <<endl;
}
}
else
{
cerr<<"open failed"<<…
[/Quote]

很好,我试了,还要加哥system("pause"),不然exe会一闪而过。
jinye_kim 2009-03-29
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 j60014589 的回复:]
你给的路径是不正确的。你给个全路径试试
[/Quote]

全路径可以
j60014589 2009-03-28
  • 打赏
  • 举报
回复
你给的路径是不正确的。你给个全路径试试
jinye_kim 2009-03-28
  • 打赏
  • 举报
回复
在目录下确实有这个文本文件
另外判断一下指针是否为空后,如果运行生成的exe文件还是会报错
#include <iostream>
using namespace std;

main()
{
char ch[100];
FILE * p = fopen("a.txt","r");
if (p)
{
for(int i = 0; i < 6; i++)
{
fscanf(p,"%s",ch);
if(i > 4) cout <<ch <<endl;
}
}
fclose(p);
}
aaaa3105563 2009-03-28
  • 打赏
  • 举报
回复
学习
zhangjundriver 2009-03-28
  • 打赏
  • 举报
回复
明确指出你的文件的路径,在在vs下面运行,是项目默认的目录是项目的目录就是包含main函数的文件那个目录,但单独运行exe文件的时候,默认的目录就是项目目录下面的debug目录了。目录改变了,已经不是你的那么项目目录了。要使你的程序运行没有错误,应该指出你文件的绝对路径,怎么运行都不会错。我在实习的时候碰到过这个问题,当时我痛苦了很久啊。
muyejingfeng100 2009-03-28
  • 打赏
  • 举报
回复

#include <iostream>
#include <stdio.h>
using namespace std;

int main(void)
{
char ch[100];
FILE * p = fopen("d:\\data.txt","r");
if (p!=NULL)
{
for(int i = 0; i < 6; i++)
{
fscanf(p,"%s",ch);
if(i > 4)
cout <<ch <<endl;
}
}
else
{
cerr<<"open failed"<<endl;
exit(-1);
}
fclose(p);
return 0;
}
  • 打赏
  • 举报
回复
你工程下有没有a.txt文件,没有就不能打开,则返回NULL。
要不就w+方式打开,没有就可以创建文件。
yangch_nhcmo 2009-03-27
  • 打赏
  • 举报
回复

FILE * p = fopen("a.txt","r"); //程式找不到a.txt, 这时p = NULL;
fscanf(p,"%s",ch); //这里对p操作,但其为NULL,所以报错
Sco_field 2009-03-27
  • 打赏
  • 举报
回复
FILE * p = fopen("a.txt","r");
你工程所在目录下有这个文件吗?
加:
ASSERT(p != NULL);测试一下

[Quote=引用楼主 jinye_kim 的帖子:]
#include <iostream>
using namespace std;

main()
{
char ch[100];
FILE * p = fopen("a.txt","r");
for(int i = 0; i < 6; i++)
{
fscanf(p,"%s",ch);
if(i > 4) cout < <ch < <endl;
}
fclose(p);
}

这段程序在vc中编译调试没有任何问题,但要运行生成的exe文件会报iostream!=null的错误
请高手指教,谢谢
[/Quote]
xylicon 2009-03-27
  • 打赏
  • 举报
回复
FILE * p = fopen("a.txt","r");
一般来说如果没找到a.txt这个文件,也就是说没有打开成功,p都会为null的,一般都需要判断一下指针是否为空。
xylicon 2009-03-27
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;

main()
{
char ch[100];
FILE * p = fopen("a.txt","r");
for(int i = 0; i < 6; i++)
{
fscanf(p,"%s",ch); if(i > 4) cout < <ch < <endl;
}
fclose(p);
}

没判断p是否为空。

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧