CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
英特尔®游戏设计大赛100美元现金周周送 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

★这样为什么不能建立文件??????

楼主onlydelphiandi(领会精神)2003-08-01 12:44:41 在 C/C++ / C语言 提问

★这样为什么不能建立文件  
  环境:C语言   Turbo   C++3.0  
  #include   "stdio.h"  
  #include   "stdlib.h"  
  #include   "string.h"  
  #include   "conio.h"  
  void   main()  
  {  
      char   *fname,*lujing   =   "f:\\";  
      FILE   *fp;  
      clrscr();  
      scanf("%s",fname);   //输入磁盘文件名  
      strcat(lujing,fname);  
      //建立文件  
      if   ((fp   =   fopen(lujing,"w"))   ==   NULL)  
      {printf("file   open   error");  
        exit(0);  
      }  
      fclose(fp);  
  }  
  //我输入0000然后回车,但是却不能建立文件。原想应该在f:下建立0000文件的。哪错了?  
  问题点数:28、回复次数:12Top

1 楼jarjarbinks(一个曾经彷徨的程序员)回复于 2003-08-01 12:55:05 得分 5

把你的lujing变量打出来看看,可能其中有乱码。  
  char   *fname   应该修改为char   fname[x]。  
  scanf没有core调算你幸运。  
  Top

2 楼Leomaxking(害怕孤独,但已习惯孤独)回复于 2003-08-01 12:55:07 得分 5

指针fname悬空  
  考虑dos下文件名不能超过14个字符   建议char   fname[20]Top

3 楼Leomaxking(害怕孤独,但已习惯孤独)回复于 2003-08-01 13:01:49 得分 3

另:char   *lujing   =   "f:\\";改为char   lujing[25]="f:\\"为好Top

4 楼jincai(Andy)回复于 2003-08-01 13:18:26 得分 0

strcat(lujing,fname);  
   
  怎会是字符串连接呢?  
   
  改为strcpy()看看!Top

5 楼zoezinsser(wealth)回复于 2003-08-01 13:29:09 得分 0

既然主函数返回值为void,那还为什么用exit(0);Top

6 楼onlydelphiandi(领会精神)回复于 2003-08-01 15:14:11 得分 0

upTop

7 楼Leomaxking(害怕孤独,但已习惯孤独)回复于 2003-08-01 16:24:21 得分 0

strcat和exit(0)的用法都是正确的Top

8 楼iting(倚天)回复于 2003-08-01 16:54:46 得分 5

好象fopen当文件不存在时的自动建立功能并不是在所有Win操作系统和文件系统下都适用。  
  fname的用法的确错了,但是通常不至于不建立文件,因为已经给他写了几个字符,应该可以建出来一个文件来(虽然破坏了未知内存空间)。  
  建议最好明确的使用CreateFile建立。Top

9 楼onlydelphiandi(领会精神)回复于 2003-08-04 18:48:48 得分 0

为什么用char   *lujing   =   "f:\\";就不行?它和char   lujing[]   =   "f:\\";有什么区别?Top

10 楼antijpn(antijpn)回复于 2003-08-04 19:50:00 得分 5

问题在strcat、fname和lujing上面  
   
  fname应该是随机指向一个地址,而lujing指向了静态存贮区中的地址  
   
  静态存贮区的东西容不得你随便改,所以你用strcat把fname连接到lujing后面会有问题  
   
  你可以把lujing变成一个字符数组,也就是用[]声明,这样的话,f:\就在栈内,使用lujing的时候会指向栈内的地址,只要不是数组越界,基本上没有问题  
   
  但是如果你想使用strcat把东西连接起来,就不能用char   lujing[]="f:\\"了,这样内存分配的时候lujing只有4个byte的空间,你再用strcat就越界了,上面有几位说到用char   lujing[20]是可取的Top

11 楼onlydelphiandi(领会精神)回复于 2003-08-05 11:51:50 得分 0

to;楼上的  
  可是我只是将char   *fname,*lujing   =   "f:\\";改为char   *fname,lujing[]   =   "f:\\";  
  便能建立文件了,没有错误,如何解释????????  
  不信你们试试。Top

12 楼antijpn(antijpn)回复于 2003-08-05 12:51:33 得分 5

能建立文件是因为lujing在定义的时候被定义成为一个字符数组,虽然越界,但是fopen函数读取文件名是一直读到'\0'为止,所以虽然可以创建文件,实际上已经造成了越界  
   
  如果不相信的话,可以在lujing前面定义一个int类型的变量,你在scanf之前看一下这个变量是多少,在scanf之后你再看看这个int是不是一样  
   
   
  说实话,你这样做是极度危险的,搞不好程序就崩溃了Top

相关问题

  • 为什么不能建立ASP.NET文件?
  • 为什么不能建立ASP.NET文件?
  • 为什么我建立的ASA7数据库文件不能更换路径?重赏之下必有勇夫。
  • 为什么不能见一文件夹?
  • NT为什么不能放avi文件?
  • 为什么不能删掉文件
  • 为什么LoadFromFile();不能 load JPEG 文件。
  • PDF文件不能打开,为什么?
  • 我为什么不能创建文件?
  • 为什么不能读文件

关键词

  • 文件
  • 字符
  • 文件名
  • 连接
  • lujing
  • fname
  • 建立
  • strcat
  • 数组
  • 越界

得分解答快速导航

  • 帖主:onlydelphiandi
  • jarjarbinks
  • Leomaxking
  • Leomaxking
  • iting
  • antijpn
  • antijpn

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo