在C中将int转换为char的strlen的奇怪输出

时间:2018-09-09 00:03:43

标签: c string type-conversion int

为什么下面的代码将长度打印为2而不是1?

int i = 2;

char tmp = i + '0';

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

1 个答案:

答案 0 :(得分:3)

  

为什么下面的代码会打印...

因为您的代码表现出未定义的行为,并且可以执行任何操作(包括崩溃而不是完全不打印任何内容)。

strlen contract 表示您必须将指向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));