2017-12-07 21 views
-5

接頭辞(たとえば"type=")と接尾辞(たとえば",")で指定されたデータを含むchar配列からデータを抽出する関数を記述したいと思います。私はstrstrとポインタarythmeticsを扱うのに苦労しているので、その関数を書く試みは無意味です。私は、関数の本体は、次のようになりたい:接頭辞と接尾辞で指定されたchar配列から文字列を抽出

void extract_string(char input[], char output[], char start[], end[]) { 
    ... 
} 

と(パラメータを持つ)関数の呼び出しはこのように見えるように:

// extracting type and nickname 
char message[128] = "type=client_information,port=6666,hostname=127.0.0.1,nickname=stack,"; 
char type[32]; 
char nickname[32]; 
extract_string(message, type, "type=", ","); 
extract_string(message, nickname, "nickname=", ","); 

あなたは私にこの機能を実装するための正しい方法を示していただけますか?これはあまりにも複雑ではないと思う、私はちょうどどこかでつまった...あなたの懸念をありがとう。

+6

"この機能を書く試みは無意味です" < - そうではありません。コードとデバッグの試行と特定の質問を表示します。 –

+2

_ "どこかでたどり着いた" _どこ?何が問題になったのですか?本当にここに質問があるかどうかはわかりません。 –

+1

あなたが私たちにそれを示していない場合、あなたのコードに何が間違っているかを伝えることはできません。 –

答えて

0

次の提案番号:

  1. 「が出力[]」配列は、+ 1
  2. 「が出力[]」の文字列を含むことはないと仮定した結果を保持するのに十分な長さであることを前提としてい「[]」末端「[]開始」も

警告:これは

が警告テストされていない:で得られた文字列「の出力は[]」NULそう終了していない呼び出し元のコード(おそらく) 〜すべきその配列をすべて '\ 0'に初期化する

void extract_string(char input[], char output[], char start[], end[]) 
{ 
    char *startPos = strstr(input, start); 
    if(!startPos) 
    { 
     fprintf(stderr, " %s not found in %s\n", start, input); 
     return; 
    } 

    startPos += strlen(start); 

    char *stopPos = strstr(startPos, end); 
    if(!stopPos) 
    { 
     fprintf(stderr, " %s not found in %s\n", end, startPos); 
     return; 
    } 

    memcpy(output, startPos, stopPos - startPos +1); 
} // end function: extract_string 
関連する問題