易码技术论坛

 找回密码
 加入易码
搜索
查看: 476406|回复: 12

[求教]问个lava1.0中写文件的问题

[复制链接]
发表于 2007-8-6 20:43:40 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| 发表于 2007-8-6 21:08:37 | 显示全部楼层
应该没溢出吧,都没到6KB
发表于 2007-8-6 21:39:32 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2007-8-6 23:35:03 | 显示全部楼层
注意到:
char s[20],buf[100];
memset(buf,'a',100);
strlen(buf)

字符串必须以0结束!
因为buf的100个字节全是‘a',不含0,这样
strlen(buf)得到的将不是100,而是比100大的某个不确定数字!
 楼主| 发表于 2007-8-7 08:57:09 | 显示全部楼层
LEE的所言极是,是我疏忽了,不过问题依然存在,单独运行那么一小段代码好使,放到主程序中就写不进去了,晕晕的~
我想问问各位编程老手有没遇到过这样的问题,你们是如何把一个int型的数组输出到文本文件中的,并且打开记事本能看到数字而不是字符乱码,是用sprintf()吗?先用strcat()将所有的数字输出到char数组,再一次写入文件?
发表于 2007-8-7 09:02:47 | 显示全部楼层
主程序必有bug!
帖出来大家看看
 楼主| 发表于 2007-8-7 09:46:57 | 显示全部楼层
//问题出在这里!
int savetxt()
{
  no=1;
  memset(buf,0,400);
  Block(82,53,159,79,0);
  for(;;)
  {
   TextOut(84,53,"选择图片编号:",1);
   sprintf(s,"〈 %d 〉  ",no);
   TextOut(100,66,s,1);
   Refresh();
   key=getchar();
   if(key==key_esc)
    return 0;
   if(key==key_left)
   {
    no--;
    if(no<1)
      no=20;
   }
   if(key==key_right)
   {
    no++;
    if(i>20)
      no=1;
   }
   if(key==key_enter)
   {
    for(k=1;k<=height;k++)
    {
      for(j=1;j<=width/8;j++)
      {
       sum=0;
       for(i=1;i<=8;i++)
        sum=data[j*8-8+i][k]*(256>>i)+sum;
       ch10to16(sum);
       strcat(buf,s);
      }
    }
    sprintf(s,"/文本文件/%d.txt",no);
    if(fp=fopen(s,"w")==0)
      return 0;
    fwrite(buf,1,strlen(buf),fp);
    fclose(fp);
    return 1;
   }      
  }
}
发表于 2007-8-7 09:48:48 | 显示全部楼层
代码走样了
不能用
 楼主| 发表于 2007-8-7 10:04:36 | 显示全部楼层
怎么上传附件,我找不着
代码复制到IDE里能用的
发表于 2007-8-7 14:24:18 | 显示全部楼层
savetxt函数里的if(fp=fopen(s,"w")==0)return 0;有问题。
&#39;=&#39;的优先级低于&#39;==&#39;,相当于执行if(fp=(fopen(s,"w")==0))return 0;。看清楚了,这时fp为0,所以fwrite函数和fclose函数执行了也是无效的。
发表于 2007-8-7 14:40:09 | 显示全部楼层

还是ls眼力好啊
fopen(s,"w")==0为假,所以
fp=fopen(s,"w")==0相当于
fopen(s,"w");
fp=0;
而0为非法文件句柄,所以对fp做fwrite是会失败的
 楼主| 发表于 2007-8-7 17:53:15 | 显示全部楼层
问题解决了
感谢CCTV,感谢MTV
感谢yan,LEE,红鸡……
上帝啊,让此帖沉下去吧!
 楼主| 发表于 2007-8-6 20:32:09 | 显示全部楼层 |阅读模式
  先看代码:
int no;
char fp;
char s[20],buf[100];
void main()
{
    no=1;
    memset(buf,&#39;a&#39;,100);
    sprintf(s,"/文本文件/%d.txt",no);
    fp=fopen(s,"w");
    fwrite(buf,1,strlen(buf),fp);
    fclose(fp);
    printf("%s",buf);
    getchar();
   
}
没问题吧,可以正常把buf中的字符写入到文本中。
但是我把这段代码写到另个比较长的lava程序中(该程序只读写1个文件),编译通过,运行,发现文本文件中没任何字符。
用星端和pc端的编译器结果都一样,百思不得其解……
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2024-3-29 15:14 , Processed in 0.012379 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表