首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

生手求指导关于指针数组

2012-08-21 
新手求指导关于指针数组void main(){char *p[3]{0}char *tmp0printf(请输入三个字符串:\n)scanf(%

新手求指导关于指针数组
void main()
{char *p[3]={0};
char *tmp=0;
printf("请输入三个字符串:\n");
scanf("%s,%s,%s",p[0],p[1],p[2]);
//char *p[3]={"aa","dd","cc"};
for(int i=0;i<2;i++)
{
if(strcmp(p[i],p[i+1])>0)
{
tmp=p[i];
p[i]=p[i+1];
p[i+1]=tmp;
}
}
printf("%s,%s,%s\n",p[0],p[1],p[2]);
}
这是我写的输入三个字符串,从小到大输出。
单步运行到scanf行报错0xC0000005: Access Violation.
求高手指点错在哪里?
如果直接给指针数组赋值则不报错。

[解决办法]
p[0]/p[1]/p[2]没有分配足够的空间,先用malloc函数分配一下。
[解决办法]
char *p[3]={0};

声明的是个指针数组 放着3个指针

使用指针的时候先申请空间 new or malloc
[解决办法]
给指针内型分配的空间当然会按指针类型去访问,同样是0xC0000005四个字节的内容,如果是int类型(32位)那么,就能这段内容就会被当做一个int值读出来,如果是指针内型比如char * 那么就回去找 0xC0000005 这个地址存放的字符串。显然这个地址是错误的(Access Violation) 大概就是这么个意思。
[解决办法]
0xC0000005是内存错误,char *p[3]={0};是声明了一个数目为3的指针数组,即每个元素都是一个指针,但是并没有为每个元素指针申请内存空间,所以你在使用scanf读入数据时,会报内存错误,对于指针一定要先申请合适的内存空间,才能进行使用。
[解决办法]
你只是定义了三个指针,没有定义指针指向的空间
[解决办法]
既然用指针,就该知道指针指向哪里
否则就别用指针,该睡觉睡觉该玩游戏玩游戏

char *p[3]={0};
scanf("%s,%s,%s",p[0],p[1],p[2]);
我就问楼主一句,scanf函数会把得到的字符串放到你给出的指针指向的内存中——那么p[0]等三个指针此时指向什么地方?
[解决办法]

探讨

引用:
p[0]/p[1]/p[2]没有分配足够的空间,先用malloc函数分配一下。

可以不适用malloc函数吗?p[0],p[1],p[2]都是指针类型,不占用多少空间吧?第一句char *p[3]={0};
给他分配的空间不够吗?

热点排行