出现野指针,求大神帮助

L纪老猴子 2014-04-12 02:38:02
以下是我从《c语言入门经典》第五版中敲在电脑上的一段代码:
#include <stdio.h>
#include <stdlib.h>
#define _STDC_WANT_LIB_EXT1_

int main ()
{
long num1=234567L;
long num2=345123L;
long num3=789234L;
long num4=0L;
long num5=0L;
long num6=0L;
float fnum=0.0f;
int ival[6]={0};
FILE *pfile=NULL;
char *filename ="myfile.txt";

if(fopen(&pfile,filename,"w"))
{
printf("Failed to open the file.\n");
exit (1);
}
setvbuf(pfile,NULL,_IOFBF,BUFSIZ);
fprintf(pfile,"%6ld%6ld%6ld",num1,num2,num3);
fclose(pfile);
if(fopen(&pfile,filename,"r"))
{
printf("Failed to open the file");
}
rewind(pfile);
fscanf(pfile,"%6l%6l%6l",&num4,&num5,&num6);
printf("%6l%6l%6l",num4,num5,num6);

fclose (pfile);
putchar (10);
system ("pause");
return 0;
}
编译无错误,但是运行结果如下:


求大神帮着,为什么会出现这个结果。
《c语言程序设计》第五版推荐使用GNU编译器,我使用的编译器是visual studio 2010


...全文
229 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
不要做咸鱼 2014-04-18
  • 打赏
  • 举报
回复
是你函数方式用的不对吧
赵4老师 2014-04-16
  • 打赏
  • 举报
回复
作为一个C程序员,对 scanf,sscanf,fscanf printf,sprintf,fprintf 这类函数的用法,还是要做到“拳不离手,曲不离口”的。
如此美丽的你 2014-04-15
  • 打赏
  • 举报
回复
引用 1 楼 cdkrrr 的回复:
fopen函数简介 函数功能:打开一个文件 函数原型:FILE * fopen(const char * path,const char * mode); 相关函数:open,fclose,fopen_s[1],_wfopen 所需库:<stdio.h> 返回值:文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno 中。 一般而言,打开文件后会做一些文件读取或写入的动作,若打开文件失败,接下来的读写动作也无法顺利进行,所以一般在fopen()后作错误判断及处理。 ---------------------------------------- 建议按标准写法写fopen. 另外
rewind(pfile);
    fscanf(pfile,"%6l%6l%6l",&num4,&num5,&num6);
printf("%6l%6l%6l",num4,num5,num6);
改为:
rewind(pfile);
    fscanf(pfile,"%6ld%6ld%6ld",&num4,&num5,&num6);
printf("%6ld%6ld%6ld",num4,num5,num6);
++
Z纪老猴子 2014-04-13
  • 打赏
  • 举报
回复
为什么建议使用标准fopen函数,那怎么不能用fopen_s函数呢?c语言入门经典上这本书关于文件这里全部用的是fopen_s啊
cdkrrr 2014-04-13
  • 打赏
  • 举报
回复
引用 2 楼 u014687239 的回复:
为什么建议使用标准fopen函数,那怎么不能用fopen_s函数呢?c语言入门经典上这本书关于文件这里全部用的是fopen_s啊
只是一个建议,我没看过这本书,不知道里面的fopen_s是怎么实现的。 楼主的问题,只需要把%6l------------->修改为 %6ld 即可。
cdkrrr 2014-04-12
  • 打赏
  • 举报
回复
fopen函数简介 函数功能:打开一个文件 函数原型:FILE * fopen(const char * path,const char * mode); 相关函数:open,fclose,fopen_s[1],_wfopen 所需库:<stdio.h> 返回值:文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno 中。 一般而言,打开文件后会做一些文件读取或写入的动作,若打开文件失败,接下来的读写动作也无法顺利进行,所以一般在fopen()后作错误判断及处理。 ---------------------------------------- 建议按标准写法写fopen. 另外
rewind(pfile);
    fscanf(pfile,"%6l%6l%6l",&num4,&num5,&num6);
printf("%6l%6l%6l",num4,num5,num6);
改为:
rewind(pfile);
    fscanf(pfile,"%6ld%6ld%6ld",&num4,&num5,&num6);
printf("%6ld%6ld%6ld",num4,num5,num6);

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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