当前位置: 技术问答>linux和unix
一个sprintf函数问题
来源: 互联网 发布时间:2014-12-27
本文导语: 我用sprintf函数如下: sprintf(dst,"((src net %s and port %u) and (dst net %s and port %u))",inet_ntoa(srcip),srcport,inet_ntoa(dstip),dstport); (srcip和dstip都是struct in_addr结构体) 在调用此函数前,我打印了srcip和dstip的值是不一样的,...
我用sprintf函数如下:
sprintf(dst,"((src net %s and port %u) and (dst net %s and port %u))",inet_ntoa(srcip),srcport,inet_ntoa(dstip),dstport);
(srcip和dstip都是struct in_addr结构体)
在调用此函数前,我打印了srcip和dstip的值是不一样的,而最终结果好像第二个%s取的参数是inet_ntoa(srcip),导致两个%s的位置上值是一样的,我百思不得其解。请指教一下,这问题处在那儿了。
sprintf(dst,"((src net %s and port %u) and (dst net %s and port %u))",inet_ntoa(srcip),srcport,inet_ntoa(dstip),dstport);
(srcip和dstip都是struct in_addr结构体)
在调用此函数前,我打印了srcip和dstip的值是不一样的,而最终结果好像第二个%s取的参数是inet_ntoa(srcip),导致两个%s的位置上值是一样的,我百思不得其解。请指教一下,这问题处在那儿了。
|
inet_ntoa 返回值用一个静态变量,所以,加上传参的指针,因而,最后字符串一样
|
inet_ntoa 返回的char*是静态分配缓冲区,两次返回的是同一个地址