void SortString ( char *ptr[], int n ){ int i,j,k,min,zj; char* arr[10]; for(i=0;i<n;i++){ for(j=1;j<n;j++){ if(ptr[j]<ptr[j-1]){ *arr[0]=ptr[j]; ptr[j]=ptr[j-1]; ptr[j-1]=*arr[0]; } } } }哪错了?
时间: 2024-01-20 10:02:10 浏览: 146
这段代码有几个问题:
1. `char* arr[10]` 定义了一个指向 `char` 类型的指针数组,但是没有为其中的每个指针分配内存空间,因此无法使用指针数组中的指针来存储数据。你可以使用一个临时变量来存储交换的数据。
2. `*arr[0]=ptr[j]` 这行代码的目的是将 `ptr[j]` 的值赋给 `arr[0]` 指向的内存地址,但是 `arr[0]` 指向的内存空间并没有被分配,因此这个操作会导致未定义的行为。
下面是修改后的代码:
```c
void SortString(char *ptr[], int n) {
int i, j, min;
char tmp[100]; // 临时变量用于交换数据
for (i = 0; i < n; i++) {
min = i;
for (j = i + 1; j < n; j++) {
if (strcmp(ptr[j], ptr[min]) < 0) {
min = j;
}
}
if (min != i) {
// 交换 ptr[i] 和 ptr[min]
strcpy(tmp, ptr[i]);
strcpy(ptr[i], ptr[min]);
strcpy(ptr[min], tmp);
}
}
}
```
这段代码使用选择排序算法对字符串数组进行排序。每次找到未排序部分中最小的字符串,然后将其交换到已排序部分的末尾。注意,这里使用了 `strcmp` 函数来比较字符串的大小。
阅读全文