当前位置: 技术问答>linux和unix
求教SCO UNIX下使用sscanf()遇到的问题!!!(100分)
来源: 互联网 发布时间:2015-05-17
本文导语: 源代码如下: ------------------------------------------------- 1 #include 2 void 3 main(void) 4 { 5 char string[100]; 6 double var; 7 int ret; 8 strcpy ( string, "1501.0399...
源代码如下:
-------------------------------------------------
1 #include
2 void
3 main(void)
4 {
5 char string[100];
6 double var;
7 int ret;
8 strcpy ( string, "1501.0399999999999636" );
9 ret = sscanf( string, "%lf", &var );
10 printf ( "var=[%lf]n", var );
11 }
-------------------------------------------------
输出:var=[1025.009293]
相同程序在AIX上输出为var=[1501.040000]
如果第5行改为 strcpy ( string, "1501.0399999999999630" ),输出正确var=[1501.040000]
使用atof()函数也出现同样问题。
感觉是SCO下sscanf()函数的一个bug,求教各位了!
给100分!
-------------------------------------------------
1 #include
2 void
3 main(void)
4 {
5 char string[100];
6 double var;
7 int ret;
8 strcpy ( string, "1501.0399999999999636" );
9 ret = sscanf( string, "%lf", &var );
10 printf ( "var=[%lf]n", var );
11 }
-------------------------------------------------
输出:var=[1025.009293]
相同程序在AIX上输出为var=[1501.040000]
如果第5行改为 strcpy ( string, "1501.0399999999999630" ),输出正确var=[1501.040000]
使用atof()函数也出现同样问题。
感觉是SCO下sscanf()函数的一个bug,求教各位了!
给100分!
|
整型是与CPU有关的,big-endian和little-endian不同,需要用htons/htonl等来转换。浮点数是编译器处理的。C标准的规定上面我说了,其实就是把double作为一个8字节的字符数组,按照IEEE规定来解释。所以,只要编译器相同,救没有问题了。
ASN.1用在SNMP等等协议里进行异构网络环境通信,是非常成熟的技术,也有现成的API可用。
书:http://www.c7.com/ss7/books/ASN1_Complete.pdf
《ASN.1 Communication between Heterogeneous Systems》在网上也有电子版流传。
ASN.1用在SNMP等等协议里进行异构网络环境通信,是非常成熟的技术,也有现成的API可用。
书:http://www.c7.com/ss7/books/ASN1_Complete.pdf
《ASN.1 Communication between Heterogeneous Systems》在网上也有电子版流传。
|
我在sco 5.0.5上试了一下,结果如下:
sco cc: var=[1501.03999999999996000000]
gcc 3.2.1(自己编译的) var=[1025.00929261256056000000]
sco 5.0.6/gcc 2.95.2 var=[1501.03999999999996000000]
sco cc: var=[1501.03999999999996000000]
gcc 3.2.1(自己编译的) var=[1025.00929261256056000000]
sco 5.0.6/gcc 2.95.2 var=[1501.03999999999996000000]