-2

以下のメッセージを含む char* があります。「movie.mjpeg」の名前は可変長です。映画の名前と CSeq 番号を別の変数に保存してから、char* を破棄できるように、char* を分析するにはどうすればよいですか。

SETUP movie.Mjpeg RTSP/1.0 CSeq: 1 トランスポート: RTP/TCP; インターリーブ=0

4

2 に答える 2

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()すべてのフィールドの変換に本当に成功したことを確認することをお勧めします。そうしないと、存在する値に依存できません。

于 2013-04-03T08:08:08.647 に答える