char name[10]; 宣告的是**單維**字元陣列(只能存一個長度 ≤9 的字串),但 `sort` 需要**二維**陣列或指標陣列(`char* name[10]`)存放 10 個字串。#include
#include
#define MAX_STR 10
#define MAX_LEN 80
void sort(char *name[], int n) {
char *tmp;
for (int i = 0; i < n - 1; i++) {
int k = i;
for (int j = i + 1; j < n; j++) {
if (strcmp(name[j], name[k]) < 0) k = j;
}
if (k != i) {
tmp = name[i]; name[i] = name[k]; name[k] = tmp;
}
}
}
int main() {
char storage[MAX_STR][MAX_LEN]; // 真正存放字串的二維陣列
char *name[MAX_STR]; // 指標陣列指向每行
for (int i = 0; i < MAX_STR; i++) {
printf("輸入第 %d 個字串: ", i + 1);
fgets(storage[i], MAX_LEN, stdin);
storage[i][strcspn(storage[i], "\n")] = '\0'; // 去換行
name[i] = storage[i];
}
sort(name, MAX_STR);
for (int i = 0; i < MAX_STR; i++)
puts(name[i]);
return 0;
}
理解「二維陣列存資料、指標陣列做排序」的分離思想,是 C 語言處理多字串排序的標準模式。