Я думаю, вам лучше использовать strdup()
для копирования строки вместо использования strcpy
, потому что первая строка будет храниться в куче, а вторая строка будет храниться в стеке, который легко теряется после вашего вызова sort()
.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void sort(char *array[], int start, int end) {
for (int i = start; i <= end - 1; i++) {
for (int j = i + 1; j <= end; j++) {
// swap if array[i] > array[j]
if (strcmp(array[i], array[j]) > 0) {
char *tmp = strdup(array[j]);
array[j] = strdup(array[i]);
array[i] = strdup(tmp);
}
}
}
}
int main(int argc, char *argv[]) {
if (argc < 2) {
fprintf(stderr, "Usage: %s <string> ...\n", argv[0]);
exit(EXIT_FAILURE);
}
sort(argv, 1, argc - 1); // sort
for (int i = 1; i < argc; i++) {
printf("%s ", argv[i]);
}
printf("\n");
exit(EXIT_SUCCESS);
}
$ ./sort_string_array ghi def abc
abc def ghi
или вы можете просто переключаться между указателями вместо копирования одной строки в другую.