2016-01-22 106 views
0

我想這個遞歸函數打印出LONG_MAX的(包含在limits.h中)八進制值LONG_MAX八進制值:如何獲得

void ft_get_nbr_base(long int nb, char *base, int i) 
{ 
    int  size_base; 
    int  size_nb; 
    char *str; 
    size_base = ft_strlen(base); 
    if (nb >= size_base) 
     ft_get_nbr_base(nb/size_base, base, i); 
    if (i == 1) 
     ft_putchar(base[(long int)(nb % size_base)]); 
    if (i == 2) 
     ft_putchar(ft_toupper(base[(long int)(nb % size_base)])); 
} 

所以我這樣稱呼它:ft_get_nbr_base(LONG_MAX ,「」,1);

結果是:777777777777777777777 而我做printf(「%o」,LONG_MAX),我得到37777777777。你能否向我解釋如何得到與printf相同的結果,以及它爲什麼顯示這種差異?由於

+0

你爲什麼這樣做? –

+0

我記錄了printf函數 – zakk8889

+0

代碼'printf(「%o」,LONG_MAX)'應該從編譯器中產生一個警告。 – user3386109

回答

3

嘗試

fprintf(stdout, "%lo\n", LONG_MAX); 

因爲它是long int您需要的"l"修改,編譯器警告說這件事,這是在任何printf()手冊非常清晰。

+0

謝謝我現在明白了這個問題,所以printf(「%o」,LONG_MAX)給出的事實37777777777可以稱爲「未定義的行爲」? – zakk8889

+0

事實上,將給定說明符的不正確類型傳遞給'printf()'是* undefined behavior *。 –

+0

所以我想對我的printf我必須寫這個特殊的案例寫這個特殊的虛假陳述...... Thks – zakk8889