新微赢技术网
标题:
碰到一个奇怪的问题,希望能在这里找到答案--*soft_wind转移
[打印本页]
作者:
小嘛怪
时间:
2009-11-3 04:03
标题:
碰到一个奇怪的问题,希望能在这里找到答案--*soft_wind转移
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char* argv[])
{
char *a[5]; //最初申明的数组指针
int n;
cout<<"请输入字符串数目:";
cin>>n;
cout<<"请输入"<<n<<"个字符串:"<<endl;
for(int i=0;i<n;i++)
{
a[i]=new char[10]; //分配10个字符的输入空间,这里可以视情况自己改 ;
cin>>a[i];
}
for(i=0;i<n;i++)
{
cout<<a[i]<<endl; //观察输入数据的输出情况;
}
for(i=n-1;i>-1;i--)
{
delete []a[i]; //释放内存空间;
}
return 0;
}
这样的程序会出现个问题是 比如此程序目前声明的数组指针是5 (PS:2以上都可以) 的,你如果输入6个及6个以下的字符串( PS:即 当输入字符串小于等于 n+1) 是不会报错的,但是你声明的数组指针是1的话(PS: char *a[1]; 那么你输入的N=2的话并且输入字符串,就会报错。 这个与前面的 能输入N+1个字符串的结论就有矛盾了 )
我想此问题应该是属于空间声明的再分配问题,但是为什么n+1的情况在为1的时候就不成立?
想不明白。。。。。
以下是一个更奇怪的问题,以上的问题我只要加一个string 的声明,上面的问题就都没有了,而且就我所能输入的最大范围,都不会报错
作者:
Forever紫月
时间:
2009-11-3 04:03
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char* argv[])
{
char *a[5]; //最初申明的数组指针
string s; //注意这里,只是声明(分配了空间)。但是不明白为什么S的空间怎么可以对char *a[5]照成影响。。。。。。
int n;
cout<<"请输入字符串数目:";
cin>>n;
cout<<"请输入"<<n<<"个字符串:"<<endl;
for(int i=0;i<n;i++)
{
a[i]=new char[10]; //分配10个字符的输入空间,这里可以视情况自己改 ;
cin>>a[i];
}
for(i=0;i<n;i++)
{
cout<<a[i]<<endl; //观察输入数据的输出情况;
}
for(i=n-1;i>-1;i--)
{
delete []a[i]; //释放内存空间;
}
return 0;
}
作者:
毅歌
时间:
2009-11-3 04:03
我是公司的机器
CPU:AMD 3000+
操作系统:MS windows2000 pro
编译环境:VC6.0英文版
作者:
瘋子愛老婆
时间:
2009-11-3 04:03
望帅哥美女赐教,谢谢
作者:
Yaci
时间:
2009-11-3 04:03
还望不吝赐教
作者:
Kdsffsd
时间:
2009-11-3 04:03
我试验的结果和您的恰恰相反啊:
char *a[5]; 时 输入6就会报错
char *a[1]; 时 输入1不会报错
我的编译环境vc++6.0 中文版 也搞不懂
作者:
叛逆ぁ太上皇
时间:
2009-11-3 04:03
char *a[5]; 與 a[i] 中的 i ??
作者:
绿茶
时间:
2009-11-3 04:03
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char* argv[])
{
char **a; //最初申明的2级指针
int n;
cout<<"请输入字符串数目:";
cin>>n;
a=new char *[n];
cout<<"请输入"<<n<<"个字符串:"<<endl;
for(int i=0;i<n;i++)
{
a[i]=new char[10]; //分配10个字符的输入空间,这里可以视情况自己改 ;
cin>>a[i];
}
for(i=0;i<n;i++)
{
cout<<a[i]<<endl; //观察输入数据的输出情况;
}
for(i=n-1;i>-1;i--)
{
delete []a[i]; //释放内存空间;
}
return 0;
}
作者:
孤独者
时间:
2009-11-3 04:03
我知道怎么改,我只是想问下:为什么加个 string就能解决一切问题? 到底是为啥?不明白不了解。。。。。
作者:
痴人痴想
时间:
2009-11-3 04:03
完全不敢相信你说的,于是试了下,你的编译器有问题,1楼的问题绝对不会发生:输入6肯定是内存错误啊。
string和这个没关系。
欢迎光临 新微赢技术网 (http://bbs.weiying.cn/)
Powered by Discuz! X3.2