关于用vc++编写文件输入与输出的程序

我的程序如下:#include<iostream.h>#include<fstream.h>#include<string.h>intmain(){char*test[3... 我的程序如下:
#include<iostream.h>
#include<fstream.h>
#include<string.h>
int main()
{
char *test[30];
int i;
char fw[30];
ofstream ofi;
ifstream ifi;
cout<<"请输入你需要的文本:";
cin>>test[30];
cout<<"请输入你所要保存的文件名:";
cin>>fw[30];
ofi.open(fw);
for(i=0;i<strlen(test[30]);i++)
{
ofi<<test[30];
}
ofi<<endl;
return 0;
}
我编译这个程序时没有错误,执行完后,我没有找到我所建立的那个文件,就算找到了那个文件也是空白的,没有我执行是输入的文字.
我想问一下这是什么原因,要怎样解决.
可是我输入的是aaaaaaaaa(9个a)但是所生成的文件里却有大概90个a和我输入的字符个数出入太大了请问是怎么回事,该怎么办?
展开
 我来答
bingbingzhe
2007-04-09 · 超过31用户采纳过TA的回答
知道小有建树答主
回答量:91
采纳率:0%
帮助的人:0
展开全部
#include<iostream.h>
#include<fstream.h>
#include<string.h>
int main()
{
char *test[30];
int i;
char fw[30];
//::memset(fw,0,30);
ofstream ofi;
ifstream ifi;
cout<<"请输入你需要的文本:";
cin>>test[30];
cout<<"请输入你所要保存的文件名:";
cin>>fw;
ofi.open(fw);
for(i=0;i<strlen(test[30]);i++)
{
ofi<<test[30];
}
ofi<<endl;
return 0;
}
你的 cin>>fw[30].这句有问题,首先是fw[30]这个空间是未知的你并没有分配,因为fw的 下标直到29.其次,你这样只是给fw数组的最后一位赋值了
所以有错误。。

测试案例:
第一次输入 :dddddddddddd
第二次输入:aa.txt

那么将在程序所在的文件夹下看到这个文件,并且是正确 的 !



针对楼主的补充提问,我补充说明下,按照楼下的做法是没有错的 ,
但是我 说一下为什么上面我写的有错

char *test[30];

这里定义的是指针数组。至于什么是 指针数组,如果你不懂,可以参考有关资料。
那么cin>>test[30];
这句就是你把数据都写到test[30]这个指针指向的 地方了

for(i=0;i<strlen(test[30]);i++)

这句循环的次数是你输入的字符数目,

ofi<<test[30];
而这句将会把你输入的字符都写到文件中 ,放在循环体内,将会不断的输出同样的很多次

所以才出现你说的问题 ,

另外还有一个很严重的问题,第一次写的时候我也没注意,就是cin>>test[30];
有两个问题,
1.test[30]这个数组元素你并没有定义,是不能使用的,在这里之所以没有出错误,因为他是一个指针,指向的地方本身是没有有用数据的。如果你的磁盘空间很满,那么这杨写出现的问题的概率就很大了。所以你使用的下标不能>=30;
2test30];
这个指针你并没有给他分配内存,也就是通常所谓的野指针,指向一个未知的地方。应该NEW一个内存
这个指针使用的时候 有的时候会出现问题的。。一定要注意!!
百度网友ea853925e
2007-04-07 · TA获得超过636个赞
知道小有建树答主
回答量:604
采纳率:0%
帮助的人:635万
展开全部
cin>>test[30];
cin>>fw[30];
这两句有问题,换成
cin>>test;
cin>>fw;
另外ofi.open(fw);中还应该加个参数ofi.open(fw,ios::out)
还有下面的也要改
for(i=0;i<strlen(test[30]);i++)
{
ofi<<test[30];
}
ofi<<endl;
return 0;
}
换成
for(i=0;i<strlen(test);i++)
{
ofi<<test[i];
}
ofi<<endl;
return 0;
}
这会应该没事了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式