指针数组的有关问题,不知道有关问题出现在哪里
指针数组的问题,不知道问题出现在哪里
预期功能:
输入字符串,用指针数组指向这些二维字符串数组。在经过strcmp()的比较之后,对指针的指向进行了排序,然后在按照指针的顺序把字符串输出。然而在输入了字符串以后并不能进行排序。问题在哪里呢,求大神指教!
------解决思路----------------------
下面两个函数声明的位置不对了吧。不要放在main函数里面
------解决思路----------------------
你的排序算法访问越界了!
当 i = 0 的时候,j 的循环条件就成了 j < num, j 的最大值是 num -1
循环里面访问 pointer[j + 1] 的时候就访问到了 pointer[num] 了。 而数组下标的有效范围是 0 ~ num-1
把 for(j=0; j<num-i; j++) 改成 for(j=0; j<num-i-1; j++) 试试吧
预期功能:
输入字符串,用指针数组指向这些二维字符串数组。在经过strcmp()的比较之后,对指针的指向进行了排序,然后在按照指针的顺序把字符串输出。然而在输入了字符串以后并不能进行排序。问题在哪里呢,求大神指教!
# include<stdio.h>
# include<string.h>
int main(){
void rank(char *pointer[], int num);
void operate(char string[]);
int num, i;
char *string[10], word[10][10];
printf("how many words do you want to input:\n");
scanf("%d", &num);
printf("input the words:(end it with@)\n");
for(i=0; i<num; i++){
if(!i) printf("the 1st one:\n");
else if(1==i) printf("the 2nd one:\n");
else if(2==i) printf("the 3rd one:\n");
else printf("the %dth one:\n", i+1);
scanf("%s", &word[i]);
operate(word[i]);
//gets(word[i]);
string[i]=word[i];
}
rank(string, num);
printf("the words after rank:\n");
for(i=0; i<num; i++) printf("%s\n", string[i]);
return 0;
}
void rank(char *pointer[], int num){
int *temp, i, j;
for(i=0; i<num; i++){
for(j=0; j<num-i; j++){
if(strcmp(pointer[j], pointer[j+1])>0){
temp=pointer[j];
pointer[j]=pointer[j+1];
pointer[j+1]=temp;
}
}
}
}
void operate(char string[]){
int i=0;
while('@'!=string[i++]);
string[i]='\0';
}
------解决思路----------------------
下面两个函数声明的位置不对了吧。不要放在main函数里面
------解决思路----------------------
你的排序算法访问越界了!
for(i=0; i<num; i++){
for(j=0; j<num-i; j++){
if(strcmp(pointer[j], pointer[j+1])>0){
temp=pointer[j];
pointer[j]=pointer[j+1];
pointer[j+1]=temp;
}
}
}
当 i = 0 的时候,j 的循环条件就成了 j < num, j 的最大值是 num -1
循环里面访问 pointer[j + 1] 的时候就访问到了 pointer[num] 了。 而数组下标的有效范围是 0 ~ num-1
把 for(j=0; j<num-i; j++) 改成 for(j=0; j<num-i-1; j++) 试试吧