Visual Studio 2008 генерирует ошибку во время запуска (отладки) этой программы.
Ваши распечатки неисправны. Снимите звездочки:
printf("Before swap list[0] = %s,list[1] = %s\n",list[0],list[1]);
swap(&list[0],&list[1]);
printf("After swap list[0] = %s,list[1] = %s\n",list[0],list[1]);
Почему? Ну, list[0]
это строка "Das"
, которая имеет тип char *
. Это то, что вы хотите передать в printf. Если вы разыменуете этот указатель звездочкой, вы в конечном итоге передаете первый символ 'D'
в printf, где printf ожидает строку char *
. В итоге мы пытаемся обработать символ 'D'
как указатель. Значение ASCII 'D'
равно 68 или 0x44 в шестнадцатеричном формате, что объясняет полученное вами сообщение об ошибке.
Также хочу знать, почему также не работает void swap (char * s1, char * s2).
С помощью этой функции вы сможете поменять местами символы в двух строках, но вы не сможете поменять местами сами строки. Думайте о функции подкачки, как о нуждающихся в указателях на объекты, подлежащие обмену. Если бы вы меняли два целых числа, вы бы получили swap(int *i1, int *i2)
. Вы хотите поменять две строки типа char *
, что означает, что для функции подкачки нужны две звезды: swap(char **s1, char **s2)
. Это имеет смысл?