一个衬里找到一个变量的长度

时间:2011-10-21 10:11:07

标签: c printf

我只是偶然发现,因为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;
}

我是对的吗?我并不担心它的使用地点。只是想知道我的理解是否正确。

2 个答案:

答案 0 :(得分:3)

“任何变量的长度”是什么意思?你的意思是用于存储变量的字节数(使用sizeofstrlen函数更好地实现)或变量的字符串表示的字节长度?

对于后者,您应该小心,因为您可以使用格式选项来实际修改结果。请考虑以下示例:

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