这是一个关于字符串的简单问题。本人自学中,无人点拔,望各位高手,拔刀相助,万分感激!
相互扶助,共同进步!
在附件中!深谢
//本程序的问题是,输出的字符串总是最后一个被输入的字符串,
//即x[0],[1]总是=[2],x[2]即最后输入的那个,运行一下就知道了,谢谢
#include<iostream.h>
#include<stdio.h>
struct str_opr//结构体,count记录x数组中元素的个数
{ //x为字符型指针数组
int count;
char*x[3];
};
void inition(str_opr*p)//对指针数组进行初始化
{
p->count=0;
int i;
for(i=0;i<3;i++)
p->x[i]="\0";
}
void insert(str_opr*p,char*q)//q接收一个字符串,并把这个字符串插入到x中
{
p->x[p->count]=q;
(p->count)++;
}
int main()
{
str_opr str;//定义了结构体变量
inition(&str);
char hj[20];int i;
char*q=hj;//q接收一个字符串数组
while(str.count!=3)//循环,是为了给x数组赋值
{
cout<<"请输入插入的名字"<<endl;
gets(q);//系统函数,从键盘输入字符串
insert(&str,q);
cout<<"插入成功"<<endl;
}
for(i=0;i<str.count;i++)//输出各个字符串
puts(str.x[i]);
cout<<str.count;
cout<<endl;
return 0;
}
----------------解决方案--------------------------------------------------------
str_opr str;这个能通过编译???????????
又刚发现一个大问题:iostream.h为头文件的代码,你发到C区来干嘛?
[此贴子已经被作者于2007-9-30 16:44:50编辑过]
----------------解决方案--------------------------------------------------------
char hj[20];int i;
char*q=hj;//q接收一个字符串数组
因为q的首地址是hj,所以这个地址是被写死了。
void insert(str_opr*p,char*q)//q接收一个字符串,并把这个字符串插入到x中
{
p->x[p->count]=q;
(p->count)++;
}
于是在后边把q的地址传给结构指针时,这个q地址一直没有变化,改变的只是它的内容,于是输出结构指针内容你会看到该地址内容被踩2次。也就是最后一次字符串q的内容。
----------------解决方案--------------------------------------------------------
指针学的不好,使劲看都看不懂
void inition(str_opr*p)//对指针数组进行初始化
{
p->count=0;
int i;
for(i=0;i<3;i++)
p->x[i]="\0";
}
p->x[i]="\0";什么意思?
不是指针数组(三个指针)吗?
给指针赋个"\0"是什么意思?
还有
指针是那样赋值的吗?
----------------解决方案--------------------------------------------------------
struct str_opr
{
int count;
char*x[3]; 这里是不是应该空格一下`` char *x[3];
};
----------------解决方案--------------------------------------------------------
void inition(str_opr*p)//对指针数组进行初始化
{
p->count=0;
int i;
for(i=0;i<3;i++)
p->x[i]="\0"; //这里应该改为 p->x[i]="0"; 为指针数组初始化
}
这里实际给指针指向的字符串赋值,而不是给指针赋值
----------------解决方案--------------------------------------------------------
首先,谢谢各位的指导,真的非常感谢,大家都这么热心的帮我,我又学到了不少东西
----------------解决方案--------------------------------------------------------
----------------解决方案--------------------------------------------------------
结构体变量的复制方法,查下资料就知道了`。。
p->x[i]="\0";字符特有的复制方法,把结构体变量p的x[i]里的元素全都赋空值。
----------------解决方案--------------------------------------------------------
结构体变量的复制方法,查下资料就知道了`。。
p->x[i]="\0";字符特有的复制方法,把结构体变量p的x[i]里的元素全都赋空值。
我的天哪,你不知道还在误导别人。。。。。前面的也是。。。。
----------------解决方案--------------------------------------------------------