【发布时间】:2012-01-04 07:06:12
【问题描述】:
在 C89 模式下使用 gcc (GCC) 4.6.2。
我想知道我的sscanf 是否已正确实施?
我试图只从包含在元素中的这个 SDP 字符串中获取端口号,端口号是“49462”。
m=audio 49462 RTP/AVP 0 8
我正在像这样使用sscanf:
sscanf(element, "%*s %d", &sdp.audio_port);
所以它会忽略第一个字符串部分 'm=audio' 然后获取端口号,这正是我想要的。
端口号后面的字符串的最后部分可以忽略。事实上,可以指定更多的音频格式,即 0 8 94 101 等。因此可以验证字符串长度。不过,这只是我感兴趣的音频端口而已。
我需要为字符串的其余部分指定任何格式吗?
我遇到了一些内存问题,想知道这是否是原因。
【问题讨论】:
-
需要注意的一点是,如果
sscanf看到一个整数文字,其值不适合int,那么它的行为是未定义的。这意味着没有可移植的方法来检测或处理此类错误。如果您在致电sscanf()之前确定这不会成为问题,您可以使用它;否则,您将不得不推出自己的解析器,可能使用strtol()。