2011-10-21 40 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