为了账号安全,请及时绑定邮箱和手机立即绑定

关于指针数组的问题,为什么最后输入的字符串把之前的字符串给覆盖掉了?运行结果有问题

关于指针数组的问题,为什么最后输入的字符串把之前的字符串给覆盖掉了?运行结果有问题

C++
顾玌 2015-12-02 21:28:58
#include<iostream.h> #include<string.h> int sort(char *book[],int num) { int i,j; char *temp; for(j=1;j<=num-1;j++) for(i=0;i<num-1-j;i++) if(strcmp(book[i],book[i+1])>0) { temp=book[i]; book[i]=book[i+1]; book[i+1]=temp; } return 0; } int main() { int i,n; char *book[10]; char a[10]; cout<<"请输入字符串数量:"; cin>>n; cout<<"请输入字符串:"<<endl; for(i=0;i<n;i++) { cin>>a; book[i]=a; } sort(book,n); for(i=0;i<n;i++) cout<<book[i]<<endl; return 0; }
查看完整描述

1 回答

已采纳
?
onemoo

TA贡献883条经验 获得超454个赞

book是一个存char指针的数组,a就是一个char数组。那么在main的for循环中:

cin>>a;  // 将输入的字符串存入a

book[i]=a;  // 把a的地址存入book[i],问题就在这里,book中的元素都是指向a的!

问题就在于:你设计的book并没有真正存入输入的字符串,其中只是保存了几个指向字符串的指针,而且还都是指向同一个字符数组的。 所以book中体现的所有字符串都是你最后输入的那个。

后面sort函数中对字符串的比较也没有意义了。

查看完整回答
反对 回复 2015-12-03
  • 顾玌
    顾玌
    那我应该要怎么改,才能把输入的字符串存到数组里
  • onemoo
    onemoo
    你可以将book设计成实际存储字符的数组,比如 char book[10][10] 之类的。 在每一次读取输入后,都要将a中的字符逐个复制到book里的适当位置上。 这样能确保这些字符串是“实际”存储在book中的。
  • 顾玌
    顾玌
    明白了,谢谢
  • 1 回答
  • 0 关注
  • 1499 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信