c - 如何获得 LONG_MAX 八进制值

标签 c printf

我试图用这个递归函数打印出 LONG_MAX 的八进制值(包含在 limits.h 中):

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, "01234567", 1);

结果是:77777777777777777777 而当我执行 printf("%o", LONG_MAX) 时,我得到 37777777777。你能解释一下如何获得与 printf 相同的结果以及为什么它显示出这种差异吗?谢谢

最佳答案

尝试

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

由于它是long int,您需要"l" 修饰符,编译器会对此发出警告,并且在任何printf() 中都非常清楚。手册。

关于c - 如何获得 LONG_MAX 八进制值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34955295/

相关文章:

c++ - opencv 是如何工作的?

c++ - 不必要的 else 语句 : Is there any disadvantage to using ELSE IF when just IF can be used?

C 程序跳过 printf 和 scanf 语句

c - 虚拟 ip 和真实 ip 端口组合是唯一的吗?

c++ - 修复了 g++ 4.9.1 奇怪的 "%a"格式行为?

c - MinGW 的 msvcrt 替代品? (例如,获得符合要求的 snprintf)

c++ - 当 64 位 int 在 C/C++ 中转换为 64 位 float 并且没有完全匹配时,它是否总是落在非小数上?

C fscanf 和指针

awk - 使用awk printf对文本进行URL解码

C 在 for 循环中没有 printf