我只是偶然发现,因为printf返回它打印到输出流的no.of字符,为什么不使用它来查找c中任何变量的长度?
代码就像这样,
#include<stdio.h>
int main()
{
char *a="Length";
int i=1000;
printf("Size: %d\n",printf("%d\n",i)-1);
printf("String Size: %d",printf("%s\n",a)-1);
return 1;
}
我是对的吗?我并不担心它的使用地点。只是想知道我的理解是否正确。
答案 0 :(得分:3)
“任何变量的长度”是什么意思?你的意思是用于存储变量的字节数(使用sizeof
和strlen
函数更好地实现)或变量的字符串表示的字节长度?
对于后者,您应该小心,因为您可以使用格式选项来实际修改结果。请考虑以下示例:
float num = 10.0f;
printf("%.10f", num); // return value should be 13
printf("%f", num); // return value depends on the implementation of printf and the float value supplied
此外,您还必须考虑除小数之外还有其他表示形式。
正如其他人已经说过的那样,printf
具有实际写入stdout
的副作用。如果您不想这样,可以使用snprintf
写入缓冲区而不是stdout
:
char buffer[256];
int x = 10;
snprintf(buffer, sizeof(buffer), "%d", x); // return value is '2'
答案 1 :(得分:0)
“查找变量长度的一个班轮”
除非它内置到你的编译器中,否则你不可能,或者用一些enums
来定义一个半页长的狂野和毛茸茸的宏来表明你的类型......
对于字符串,(您不能在...上使用sizeof),请参阅:https://stackoverflow.com/a/22128415/3370790