char s,buf;
memset(buf,'a',100);
strlen(buf)
字符串必须以0结束!
因为buf的100个字节全是‘a',不含0,这样
strlen(buf)得到的将不是100,而是比100大的某个不确定数字! LEE的所言极是,是我疏忽了,不过问题依然存在,单独运行那么一小段代码好使,放到主程序中就写不进去了,晕晕的~
我想问问各位编程老手有没遇到过这样的问题,你们是如何把一个int型的数组输出到文本文件中的,并且打开记事本能看到数字而不是字符乱码,是用sprintf()吗?先用strcat()将所有的数字输出到char数组,再一次写入文件? 主程序必有bug!
帖出来大家看看 //问题出在这里!
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*(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;
}
}
} 代码走样了
不能用 怎么上传附件,我找不着
代码复制到IDE里能用的 savetxt函数里的if(fp=fopen(s,"w")==0)return 0;有问题。
'='的优先级低于'==',相当于执行if(fp=(fopen(s,"w")==0))return 0;。看清楚了,这时fp为0,所以fwrite函数和fclose函数执行了也是无效的。 嗯
还是ls眼力好啊
fopen(s,"w")==0为假,所以
fp=fopen(s,"w")==0相当于
fopen(s,"w");
fp=0;
而0为非法文件句柄,所以对fp做fwrite是会失败的 问题解决了
感谢CCTV,感谢MTV
感谢yan,LEE,红鸡……
上帝啊,让此帖沉下去吧!
[求教]问个lava1.0中写文件的问题
先看代码:int no;
char fp;
char s,buf;
void main()
{
no=1;
memset(buf,'a',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端的编译器结果都一样,百思不得其解……
页:
[1]