C++ 指针与字符串

来源:百度知道 编辑:UC知道 时间:2024/05/17 02:05:49
#include<iostream.h>
#include<stdlib.h>
#include<string.h>
#define X 5
int num=0;
struct dir
{
//char name[10]; //(1)
char *name; //(2)
//char number[10];//(3)
char *number; //(4)
};
dir s[X]={{"an","000"},{"bob","111"},{"carl","222"},{"draw","333"}};

void main()
{
while(*s[num].name)num++;//统计目前已存号码的数量=num
cout<<"当前所有信息如下:"<<endl;
cout<<"姓名 "<<"号码"<<endl;
for(int i=0;i<num;i++)
{
cout.width(4);
cout<<s[i].name<<" ";
cout<<s[i].number<<endl;
}
cout<<"当前存储状态:"<<num<<'/'<<X<<endl;
}
一运行就是“应用程序错误”,而把2,4改为1,3就好了。请帮我看一下错在哪里了?
正解:
如果使用(2)(4),当num=4时,我们要对'*s[4].name'的值进

机构中定义的指针没有分配空间。
而1,3中定义的是数组,分配了空间

你这样肯定错嘛,结构体里的指针不能那样用的,指针要先赋值才能用,你那样里面两个指针都不知道指向内存的哪里,当然应用程序错误了

想用2 4 也行,只要把
while(*s[num].name)num++;改为 while(s[num].name)num++;就行了,应为你在定义结构体成员name和number时已经指定为 字符指针型的了,下面直接引用就是指的是地址,你再用指针输出就不对了。

因为name是有字符串组成,所以要定义为字符数组。number也是,同样是遗传字符组成。也可以定义指针数组,但指针绝对不行