以下のメッセージを含む char* があります。「movie.mjpeg」の名前は可変長です。映画の名前と CSeq 番号を別の変数に保存してから、char* を破棄できるように、char* を分析するにはどうすればよいですか。
SETUP movie.Mjpeg RTSP/1.0 CSeq: 1 トランスポート: RTP/TCP; インターリーブ=0
静的フィールドが本当に静的であると仮定するとsscanf()
、変数部分をスキャンするために を使用できます。
strtok()
これには、一種の恐ろしい関数 (入力文字列を変更する) に依存しないという利点 (?) があります。また、同じ操作で文字列以外のデータを変換できるので便利です。
const char *inpStr = "SETUP movie.Mjpeg RTSP/1.0 CSeq: 1 Transport: RTP/TCP; interleaved=0";
char filename[128], transport[32];
int cseq;
if(sscanf(inpStr, "SETUP %s RTSP/1.0 CSeq: %d Transport: %s;",
filename, &cseq, transport) == 3)
{
printf("Got filename '%s', cseq=%d, transport='%s'\n",
filename, cseq, transport);
}
の戻り値をチェックして、sscanf()
すべてのフィールドの変換に本当に成功したことを確認することをお勧めします。そうしないと、存在する値に依存できません。