Странный вывод strlen при преобразовании int в char в C - PullRequest
0 голосов
/ 09 сентября 2018

Почему код ниже печатает длину как 2 вместо 1?

int i = 2;

char tmp = i + '0';

printf("len of %s is %zu \n ",&tmp,strlen(&tmp));

1 Ответ

0 голосов
/ 09 сентября 2018

Почему код ниже печатает ...

Поскольку ваш код демонстрирует неопределенное поведение и может сделать что угодно (включая сбой вместо печати чего-либо вообще).

A контракт для strlen говорит, что вы должны передать ему указатель на NUL -определенную строку. Но &tmp - это , а не указатель на такую ​​строку.

Чтобы это исправить, вы можете сделать:

char tmp[2];
tmp[0] = i + '0';
tmp[1] = '\0';  // The NUL terminator

printf("len of %s is %zu \n ", tmp, strlen(tmp)); 
...