Вы используете недопустимые спецификаторы преобразования для объектов, выведенных в вызовах printf.
В этом вызове
printf("%s", a);
спецификатор преобразования %s
ожидает аргумент типа char *
пока вы передаете объект типа char
.
В этом вызове
printf("str: %d\n", str);
спецификатор преобразования %d
ожидает аргумент типа int
во время передачи выражение типа char *
, в которое неявно преобразуется указатель массива.
Как, например, для этого фрагмента кода
char a = (char)65;
printf("%d", a);
, здесь приведена целочисленная константа 65
для типа char
является избыточным.
Вы можете написать
char a = 65;
При вызове printf вы используете спецификатор преобразования %d
, который выводит символ в виде целого числа. То есть он выводит внутреннее представление символа ASCII «A». Если вы будете использовать спецификатор преобразования %c
вместо %d
, в качестве результата вы получите символ 'A'
.