[英]Using sscanf to parse a string
在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()
的返回值,以确保您实际上已成功转换了一个值:
if (sscanf(element, "%*s %d", &sdp.audioport) != 1)
...process error...
else
...use sdp.audioport...
我在Codepad.org上运行了以下代码,它工作正常。
#include<stdio.h>
int main()
{
char *element= "m=audio 49462 RTP/AVP 0 8";
int num;
sscanf(element, "%*s %d", &num);
printf("%d\n",num);
return 0;
}
可能正如您所描述的那样,在其他地方存在Run Time Error
阻止了有效代码片段的预期输出。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.