Chinaunix

标题: 读文本,一次输出正确,二次输出为什么不一样,请高手修改? [打印本页]

作者: ycwcl    时间: 2004-10-13 16:15
标题: 读文本,一次输出正确,二次输出为什么不一样,请高手修改?
读一个文本文件,第一次输出正确,第二次输出为什么不一样,请高高手给予修改?

文本名:bzb.txt
内容:
#币种
人民币
美元
港币
英磅
德国马克
c程序名:bzb.c
源码:
#include <stdio.h>;
main()
{
FILE *fp;
int i=0;
char *ch[80];
char buff[80];
char menu_buff[80];
if((fp=fopen("bzb.txt","r")==NULL)
{
printf("不能打开文件!";
exit(0);
}
i=0;
while(fgets(menu_buff,80,fp)!=NULL){
if(menu_buff=='#')
{
strncat(buff,menu_buff+1,80);
ch[0]=buff;
printf("%s",ch[0]);
}
else
{
ch=menu_buff;
printf("%s",ch);
i++;
}
}
fclose(fp);
for(i=0;i<5;i++)
{
printf("%s",ch);
getchar();
}
}
作者: unicorns    时间: 2004-10-13 16:31
标题: 读文本,一次输出正确,二次输出为什么不一样,请高手修改?
字符串数组char *ch[80];
没有给每个元素分配空间。

ch=menu_buff;
这样只是给指针赋值而已,每次循环赋给ch的都是menu_buff的首地址。

修改
1.用malloc给每个ch分配足够的空间或者干脆定义成二维数组
ch[m][n]
2.类似这种ch=menu_buff; 改成strcpy(ch,menu_buff)
作者: ycwcl    时间: 2004-10-15 19:18
标题: 读文本,一次输出正确,二次输出为什么不一样,请高手修改?
请你帮助修改一下。
作者: Yerk    时间: 2004-10-16 11:27
标题: 读文本,一次输出正确,二次输出为什么不一样,请高手修改?
好懒哦。
作者: whpu000625    时间: 2004-10-16 17:01
标题: 读文本,一次输出正确,二次输出为什么不一样,请高手修改?
说得对,在用指针,特别是数组指针的时候,一定要记得分配内存空间,建议去看看林锐写的《高质量C/C++编程》
作者: beginer1    时间: 2004-10-16 18:51
标题: 读文本,一次输出正确,二次输出为什么不一样,请高手修改?
仅供残考.
char ch[10][80];
另外我觉得i++在第一次执行循环是i没有自加,正确位置如下
else
{
ch=menu_buff;
printf("%s",ch);

}
i++;
作者: yuxh    时间: 2004-10-18 08:24
标题: 读文本,一次输出正确,二次输出为什么不一样,请高手修改?
所有的ch指向的是同一个menu_buff,而且最后fgets(menu_buff,80,fp)=NULL,所以menu_buff为空,所以最后输出的所有ch也为空。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2