当前位置: 技术问答>linux和unix
有关sscanf问题 熟悉的请进
来源: 互联网 发布时间:2015-04-20
本文导语: u_char ip1[4]; u_char ip2[4]; sscanf("a8:7a:00:01", "%x:%x:%x:%x", (u_int*)&(ip1[0]), (u_int*)&(ip1[1]), (u_int*)&(ip1[2]), (u_int*)&(ip1[3])); /*语句1*/ sscanf("a8:7a:00:01", "%x:%x:%x:%x", (u_int*)&(ip2[0]), (u_int*)&(ip2[1]), (u_int*)&(ip2[2]), (u_int*)&(ip2[3]));...
u_char ip1[4];
u_char ip2[4];
sscanf("a8:7a:00:01", "%x:%x:%x:%x", (u_int*)&(ip1[0]), (u_int*)&(ip1[1]), (u_int*)&(ip1[2]), (u_int*)&(ip1[3])); /*语句1*/
sscanf("a8:7a:00:01", "%x:%x:%x:%x", (u_int*)&(ip2[0]), (u_int*)&(ip2[1]), (u_int*)&(ip2[2]), (u_int*)&(ip2[3])); /*语句2*/
当把语句2注释掉语句1执行正确
ip1 内容为a8 7a 00 01
去掉语句2的注释语句1执行完后
ip1 内容为00 00 00 01
为什么? 有什么使用错误?
u_char ip2[4];
sscanf("a8:7a:00:01", "%x:%x:%x:%x", (u_int*)&(ip1[0]), (u_int*)&(ip1[1]), (u_int*)&(ip1[2]), (u_int*)&(ip1[3])); /*语句1*/
sscanf("a8:7a:00:01", "%x:%x:%x:%x", (u_int*)&(ip2[0]), (u_int*)&(ip2[1]), (u_int*)&(ip2[2]), (u_int*)&(ip2[3])); /*语句2*/
当把语句2注释掉语句1执行正确
ip1 内容为a8 7a 00 01
去掉语句2的注释语句1执行完后
ip1 内容为00 00 00 01
为什么? 有什么使用错误?
|
%x希望的是一个int空间,并不是说把char*强制转换为int*就可以了,需要真正的int大小的存储空间。所以语句1已经覆盖了ip2的空间,语句2再次使用ip2,当然不对了。
这里针对的是你问的为什么,不是说没有语句2语句1就是对的。完全不对。
这里针对的是你问的为什么,不是说没有语句2语句1就是对的。完全不对。
|
使用int数组,然后再复制到u_char数组。