Вы хотите использовать параметры здесь, и поскольку ваши строки представлены в виде указателей, вам нужны указатели на указатели:
void swap(char **t1, char **t2) {
char *t;
t = *t1;
*t1 = *t2;
*t2 = t;
}
Назовите это так:
swap(&s[0], &s[1]);
Я пытался добавить strcpy вместо «=» в swap, но это не сработало.
Причина, по которой это не работает, заключается в том, что строки на самом деле хранятся вдвоичный файл программы и, следовательно, не может быть изменен, и с strcpy
вы будете писать поверх них.Если вместо этого вы скопируете их в стек или кучу, вы можете выполнить обмен с помощью strcpy
.Конечно, это будет менее эффективно, чем просто замена указателей, но это будет выглядеть так:
void swap(char *t1, char *t2) {
char buf[16]; // needs to be big enough to fit the string
strcpy(buf, t1);
strcpy(t1, t2);
strcpy(t2, buf);
}
Также вам нужно изменить определение s
на что-то похожее на
char s[2][16] = { "Hello", "World" }; // strings are copied to the stack now