sscanf和octals

时间:2011-10-06 02:33:09

标签: c macos scanf

为什么它不起作用?

const char* ip =  "192.168.1.4";
unsigned int ip4[4];
sscanf(ip,"%o.%o.%o.%o",ip4,ip4+1,ip4+2,ip4+3); // doesn't work
sscanf(ip,"%d.%d.%d.%d",ip4,ip4+1,ip4+2,ip4+3); // works

我检查了scanf(3)的手册页,它清楚地表明%o是完全可以接受的。

2 个答案:

答案 0 :(得分:10)

八进制中没有“8”和“9”,因此192168不是八进制数,因此sscanf可以' t将它们解析为八进制数。

答案 1 :(得分:1)

八进制数字可能只包含0-7位数字。在读取ip地址时,您正在寻找八位字节,而不是八进制。八位字节是一个8位的数据值。