Использование sscanf для разбора строки - PullRequest
3 голосов
/ 04 января 2012

Использование gcc (GCC) 4.6.2 в режиме C89.

Мне интересно, правильно ли реализован мой 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 ]

3 голосов
/ 04 января 2012

Я запустил следующий код на 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, препятствующий ожидаемому выводу действительного фрагмента кода.

3 голосов
/ 04 января 2012

То, что вы написали, выглядит хорошо.Нет необходимости указывать, что находится в той части строки, которую вы не анализируете.Конечно, вы должны проверить возвращаемое значение из sscanf(), чтобы убедиться, что вы действительно успешно преобразовали одно значение:

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