почему происходит сбой кодовых блоков при попытке запустить этот код:
char *ch= "Sam smith";
printf("%s\n",*ch);
ch
имеет тип char *
.
Преобразование %s
Спецификатор ожидает char *
.
Вы передаете *ch
, который является разыменованным ch
, то есть типа char
.
Если спецификаторы преобразования делают не совпадают с типами аргументов, случаются плохие вещи (неопределенное поведение).
не должен *ch
означать содержимое адреса, на которое указывает ch
, что является самой строкой
В C нет типа данных "строка" и, следовательно, нет "указателя на строку".
"Строка", на языке C, представляет собой массив символы или указатель на массив символов с нулевым байтовым терминатором.
ch
- это char *
, указатель на первый символ этого массива - так сказать, строку.
*ch
- это char
, первый символ этого массива.