Почему код ниже печатает ...
Поскольку ваш код демонстрирует неопределенное поведение и может сделать что угодно (включая сбой вместо печати чего-либо вообще).
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));