C89モードでgcc(GCC)4.6.2を使用する。sscanfを使用して文字列を解析する
sscanf
が正しく実装されていると思いますか?
要素に含まれるこのSDP文字列からポート番号だけを取得しようとしていますが、ポート番号は「49462」です。
m=audio 49462 RTP/AVP 0 8
私はこのようなsscanf
を使用しています:
sscanf(element, "%*s %d", &sdp.audio_port);
だから、最初の文字列の一部「オーディオメートル=」を無視して、私が欲しいものであるポート番号を取得します。
ポート番号の後の文字列の最後の部分は無視できます。実際、0 8 94 101などの指定されたオーディオフォーマットが存在する可能性があります。したがって、文字列の長さが確認できます。しかし、それは私が興味を持っているだけのオーディオポートで、それ以外のものはありません。
文字列の残りの部分に任意の形式を指定する必要がありますか?
メモリの問題が発生しましたが、これが原因である可能性がありますか?
注意すべきことは、 'sscanf'が値が' int'に収まらない整数リテラルを見ると、その動作は未定義です。つまり、このようなエラーを検出または処理する移植可能な方法はありません。あなたが 'sscanf()'を呼び出す前にこれが問題ではないことが確かであれば、それを使うことができます。それ以外の場合は、おそらく 'strtol()'を使って独自のパーサをロールバックする必要があります。 –