在vs2008里用fopen函数时返回 错误的指针

zhufengming 2010-09-10 11:31:39
int ReadDat()
{
FILE *fp;
int i = 0;
char *p;
if(NULL == (fp = fopen("G:\\eng.in","r")))
{
return 1;
}

while(fgets(xx[i],80,fp) != NULL)
{
i++;
}
maxline = i;
fclose(fp);
}


在while处设置断点,提示为:fp = 0x10311448 {_ptr=0x00000000 <错误的指针> _cnt=0 _base=0x00000000 <错误的指针> ...}



不过以前运行这段代码是好使的,也不知道碰那了,突然就不好使了。
不面是全部代码:


#include <stdio.h>
#include <string.h>
#include <ctype.h>
char xx[50][80];
int maxline = 0;
int ReadDat();
void WriteDat();
void DelWord();
void main()
{
if(ReadDat())
{
printf("数据文件ENG.IN不能打开\n\007");
return;
}
DelWord();
WriteDat();
getchar();
}
int ReadDat()
{
FILE *fp;
int i = 0;
char *p;
if(NULL == (fp = fopen("G:\\eng.in","r")))
{
return 1;
}

while(fgets(xx[i],80,fp) != NULL)
{
i++;
}
maxline = i;
fclose(fp);
}
void WriteDat()
{
FILE *fp;
int i;
fp = fopen("G:\\PSOUT.OUT","w");
for(i=0;i<maxline;i++)
{
printf("%s\n",xx[i]);
fprintf(fp,"%s\n",xx[i]);
}
fclose(fp);
}
void DelWord()
{
int i ; //行数
int j ; //单词的个数
int k ; //单词的序数
char word[21]; //用来存放一个单词的字符数组
char str[80]; //用来存放颠倒的字符串
char *p; //用来指向行的指针
for(i=0;i<maxline;i++)
{
memset(word,0,21); //清空word
memset(str,0,80); //清空str
j = 0; //单词的个数清为0
k = 0; //单词的序数清0
p = xx[i]; //把一行的指针赋给p

while(*p) //如果字符不为0
{
if(isalpha(*p)) //如果*p是字母
{
word[j++] = *p++; //把一个字母放入word中
if(*p) //如果*p不是0则进入下一次循环,判断*p是否为字母
{
continue;
}
}

//*p不是字母的情况
if(strlen(word)) //word长度不为0说明word里有一个单词
{
k++; //单词的个数加1
}

if(k%2==0) //单词的序数为奇数(数组的下标从0开始,所能判断偶数)
{
strcat(str,strrev(word)); //把单词倒转存入str中
}

//清0 未下次循环做准备
j = 0;
memset(word,0,21);


while(*p && (!isalpha(*p))) // *p不为0且不是字母
p++;
}
strcpy(xx[i],str);
}
}

...全文
1019 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
whuisoftware 2012-02-28
  • 打赏
  • 举报
回复
是字符编码问题,加上fopen(_T("G:\\eng.in"),_T("r"))
liyaxtdx 2011-09-14
  • 打赏
  • 举报
回复
我也遇到这个问题,请问楼主是不是win7的系统~?我也没解决~
jianzou123 2011-07-30
  • 打赏
  • 举报
回复
遇到同样的问题,请问楼主有没有搞定这问题。
sftxlin 2011-03-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 onecl1 的回复:]
在while处设置断点,提示为:fp = 0x10311448 {_ptr=0x00000000 <错误的指针> _cnt=0 _base=0x00000000 <错误的指针> ...}


这个不影响的,既然能跑到WHILE这fp此时不为空,里面有值的
你到底要问什么?
[/Quote]
指针错误,读出来的正常的吗?他就是想问什么为什么这边fopen返回的指针会是错的,怎么改让它可以正确而已
zhufengming 2010-09-10
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 namelij 的回复:]
C/C++ code

看看你有没包含 file.open所需要的头文件

c++里面,我直接

#include <fstream>

ofstream of("...");
[/Quote]
我这个用的是c
  • 打赏
  • 举报
回复

看看你有没包含 file.open所需要的头文件

c++里面,我直接

#include <fstream>

ofstream of("...");
zhufengming 2010-09-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 justkk 的回复:]
是否文件不存在?
[/Quote]

文件不存在就返回NULl了
justkk 2010-09-10
  • 打赏
  • 举报
回复
是否文件不存在?
csucdl 2010-09-10
  • 打赏
  • 举报
回复
程序没有问题,
可能是你的输入文件格式有问题
onecl1 2010-09-10
  • 打赏
  • 举报
回复
在while处设置断点,提示为:fp = 0x10311448 {_ptr=0x00000000 <错误的指针> _cnt=0 _base=0x00000000 <错误的指针> ...}


这个不影响的,既然能跑到WHILE这fp此时不为空,里面有值的
你到底要问什么?
Lucifer126 2010-09-10
  • 打赏
  • 举报
回复
错误提示 我读文件一般用 fread

65,186

社区成员

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

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