«W» печатает W и «W»; распечатывает $. Зачем?

Я начинающий Не знаю почему? Я использую Code :: Blocks. Пожалуйста, прочитайте следующий код:

введите описание изображения здесь
введите описание изображения здесь
введите описание изображения здесь
введите описание изображения здесь

Если q = W , распечатывает W.
Если q =« W «, распечатывает $.

-1

Решение

Буквальный "W" не один char, но строка с нулевым символом в конце, состоящая из 'W' а также '\0',

Один из способов получить желаемое поведение, назначив const char* и печатать это с %s

const char* q = "W";
printf("%s", q);

Как указано в комментариях, вы можете отследить этот тип ошибки, увеличив уровни предупреждений вашего компилятора.

4

Другие решения

утверждение

char q = "W";

принимает адрес строкового литерала "W"и бросает значение адреса в charто есть младший байт адреса назначается c,

В вашем случае адрес "W" может быть, например, 0x12345624и он приведен к 0x24, то есть '$',

4

char q = "W";

Включите уровни предупреждений, ваш компилятор должен пожаловаться на это. 'W' это не символ, это строковый литерал, его тип char [2] (массив из двух символов, ‘W’ и ‘\ 0’.) Он распадается на указатель на свой первый символ и преобразуется в char, который просто переводит в ascii значение ‘$’.

Для печати строковых литералов правильный спецификатор формата %s,

2
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector