#include<stdio.h>
#include<string.h>
int main(){
char *a[]={"this","is","a","string"};
char temp[100];
for(int i=0;i<3;i++){
for(int j=0;j<3-i;j++){
if(strcmp(a[j],a[j+1])>0){
strcpy(temp,a[j]);
strcpy(a[j],a[j+1]);
strcpy(a[j+1],temp);
}
}
}
for(int i=0;i<4;i++){
printf("%s\n",a[i]);
}
}
以下代码用于对字符串进行冒泡排序。它给出了分段错误。它有什么问题?
答案 0 :(得分:3)
字符串文字在C中是只读的。您的strcpy(a[j],a[j+1])
和strcpy(a[j+1], temp)
电话是非法的。
答案 1 :(得分:3)
无需使用strcpy
。您唯一需要做的就是交换a[j]
和a[j+1]
指针。
确保for
循环具有正确的边界。数组的大小为4
,有效元素的范围为[0..4)
看看以下内容:
int main(){
char const *a[]={"this","is","a","string"}; //const added
char *temp = 0; // a simple pointer
for(int i=0;i<4;i++){ //bounds changed
for(int j=0;j<4-1;j++){
if(strcmp(a[j],a[j+1])>0){ // swap pointers
temp = a[j];
a[j] = a[j+1];
a[j+1]=temp;
}
}
}
for(int i=0;i<4;i++){
printf("%s\n",a[i]);
}
}