Зачем использовать% s для символьной переменной, не выполняйте операторы под ней в c? - PullRequest
0 голосов
/ 24 января 2020
#include<stdio.h>
int main()
{
    int x=2;

    char ch='c';

    printf("%i\n",x);
    printf("%s\n",ch);
    printf("Hello");

    return 0;

}

В этом фрагменте кода я случайно поместил% s для печати значения ch вместо использования% c, но обнаружил, что он не печатает «Hello». До сих пор, я знаю,% s принимает указатель на символ и ищет нулевой символ для завершения, но вы можете объяснить, что здесь происходит? Я новичок и хочу знать об этом.

1 Ответ

4 голосов
/ 24 января 2020

Использование неверного спецификатора преобразования в printf приводит к неопределенному поведению.

Вы объявили переменную ch как имеющую тип char.

char ch='c';

Но преобразование спецификатор %s ожидает аргумент типа char *, который должен указывать на строку с нулевым символом в конце. Таким образом, значение ch 'c' равно interpreted в качестве адреса памяти.

printf("%s\n",ch);

Вместо этого используйте

printf("%c\n",ch);

В противном случае объявите переменную ch like

char *ch = "c";

, а затем

printf("%s\n",ch);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...