2016-01-22 103 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