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

#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;
}


顾玌
浏览 1513回答 1
1回答

onemoo

book是一个存char指针的数组,a就是一个char数组。那么在main的for循环中:cin>>a;  // 将输入的字符串存入abook[i]=a;  // 把a的地址存入book[i],问题就在这里,book中的元素都是指向a的!问题就在于:你设计的book并没有真正存入输入的字符串,其中只是保存了几个指向字符串的指针,而且还都是指向同一个字符数组的。 所以book中体现的所有字符串都是你最后输入的那个。后面sort函数中对字符串的比较也没有意义了。
打开App,查看更多内容
随时随地看视频慕课网APP