定义一个指针数组,如何对它输入字符串?
char*name[3],能用for(i=0;i<3;i++){scanf("%s",name+i);}输入3个字符串吗?是不是只能用赋初值的方式赋值?...
char*name[3],能用
for(i=0;i<3;i++)
{
scanf("%s",name+i);
}输入3个字符串吗?是不是只能用赋初值的方式赋值? 展开
for(i=0;i<3;i++)
{
scanf("%s",name+i);
}输入3个字符串吗?是不是只能用赋初值的方式赋值? 展开
1个回答
展开全部
指针要么是在初始化的时候进行赋值,如:char *p = "hello world!";要么在之后将指针指向一个已经初始化的内存空间,因为只定义而未初始化的指针不会指向任何内存空间,是不能对指针指向的地方进行赋值的。这就是为什么如果只定义了指针,而为初始化时要使用Xalloc或者new来申请空间。 你这样写的话,应该是不行的,要么你在后面加malloc或new申请空间在赋值,要么直接把指针指向一个已经初始化好的内存空间!以上解释和以下代码仅供参考
#include "iostream"
using namespace std;
int main ()
{
char *ptr[3];
for(int i = 0 ; i <= 2 ; i++)
//ptr[i] = "hello!"; 重新指向
{
ptr[i] = (char *)malloc(10*sizeof(char)); //申请空间,与上面的重新指向区别
cin>>ptr[i];
}
for(i = 0; i <= 2 ; i++)
cout <<ptr[i] << endl;
return 0 ;
}
#include "iostream"
using namespace std;
int main ()
{
char *ptr[3];
for(int i = 0 ; i <= 2 ; i++)
//ptr[i] = "hello!"; 重新指向
{
ptr[i] = (char *)malloc(10*sizeof(char)); //申请空间,与上面的重新指向区别
cin>>ptr[i];
}
for(i = 0; i <= 2 ; i++)
cout <<ptr[i] << endl;
return 0 ;
}
追问
我看懂你的意思了,但我想再问一下,用什么方法能比较好地输入字符串呢?用字符数组能用gets函数输入,但长度有限;而指针数组不需限制字符串的长度,但还是需要事先定义,不能比较方便地输入。有没有可从键盘输入,但又不需限制长度的方法呢?
追答
这个貌似是不可以的,你要是想从键盘输入字符串,那必须指定将数据存储到什么地方,就需要你事先开辟空间,那部分空间的大小也就是实现定好的,键盘输入就是让你往里面去填;要么就是指针指向,这里也是需要有已知空间(地址和大小)让你重新指向。。。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询