使用sscanf解析字符串

时间:2012-01-04 07:06:12

标签: c scanf

在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等。因此字符串长度可以验证。但是,它只是我感兴趣的音频端口,没有别的。

我是否需要为字符串的其余部分指定任何格式?

我遇到了一些记忆问题,我想知道这是否是原因。

2 个答案:

答案 0 :(得分:3)

你写的内容看起来很好。没有必要指定您未解析的字符串部分中的内容。当然,您应该检查sscanf()的返回值,以确保您实际上已成功转换了一个值:

if (sscanf(element, "%*s %d", &sdp.audioport) != 1)
    ...process error...
else
    ...use sdp.audioport...

答案 1 :(得分:3)

我在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阻止了有效代码段的预期输出。