2011-10-21 42 views
0

我找到了一个想法,因为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; 
} 

我说得对不对?我不关心它在哪里使用。只是想知道我的理解是否正确。

+1

它的工作原理,但效率低下它会在标准输出上生成虚假输出。 –

+1

返回变量值的打印表示的长度。另外printf有一个副作用:它会打印东西:)所以它不像没有侧面效果的函数那样干净。 – lkuty

+0

@LudovicKuty:同意。但让我们说,我有一个函数,打印它需要找到长度的变量。我打印上面代码片段中的变量和长度。那么在这种情况下编写一个干净的代码仍然有问题? – Ajai

回答

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' 
0

“一个班轮找到一个变量的长度”

不可能的,除非其内置到你的编译器或者你定义了一个野生和毛茸茸的宏观半长着几enums说明你的类型的网页...

对于字符串,(你不能的sizeof上使用...)看到:https://stackoverflow.com/a/22128415/3370790