为什么下面的代码将长度打印为2而不是1?
int i = 2;
char tmp = i + '0';
printf("len of %s is %zu \n ",&tmp,strlen(&tmp));
答案 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));