<分区>
C 函数 printf 似乎根据是否存在前导零来打印不同的值。
我试图确定 Linux“开放”系统调用中模式参数的数值。
printf("模式:%d\n",S_IRWXU);
printf("模式:%d\n",00700);
都给了我 448,而
printf("mode:%d\n",700);
给我 700,正如我对两者的期望。
这是怎么回事?
我正在使用 gcc(Ubuntu 5.4.0-6ubuntu1~16.04.5)5.4.0 20160609
<分区>
C 函数 printf 似乎根据是否存在前导零来打印不同的值。
我试图确定 Linux“开放”系统调用中模式参数的数值。
printf("模式:%d\n",S_IRWXU);
printf("模式:%d\n",00700);
都给了我 448,而
printf("mode:%d\n",700);
给我 700,正如我对两者的期望。
这是怎么回事?
我正在使用 gcc(Ubuntu 5.4.0-6ubuntu1~16.04.5)5.4.0 20160609
最佳答案
具有一个或多个前导零的数字常量是一个八进制常量,而一个没有前导零的是一个十进制常量,一个具有前导0x
是一个十六进制常量。这在任何上下文中都成立,无论值是传递给 printf
还是任何其他函数。
对于 printf
,您使用的是 %d
格式说明符,它以十进制形式打印值。如果您传入一个八进制常量,您将看到该八进制数的十进制值。在这个例子中,0700b8 == 7 * 8^2 + 0 * 8^1 + 0 * 8^0 == 7 * 64 == 448b10
如果您要处理文件权限,这些值通常表示为八进制,因此您应该始终使用前导 0。
关于C printf %d 带有前导零的错误值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47294478/