0

私はこの種の入力データを持っています。

<html>...... <!-- OK -->

コメント記号の前のデータのみを抽出したい<!--。これは私のコードです:

char *parse_data(char *input) {
    char *parsed_data = malloc(strlen(input) * sizeof(char));
    sscanf(input, "%s<!--%*s", parsed_data);
    return parsed_data;
}

ただし、期待どおりの結果が得られないようです。なぜそうなのかわかりません。

この種のデータを抽出する適切な方法と「sscanf()」の動作について誰かに説明してもらえますか。

ありがとうございました!

4

1 に答える 1

4

"%s"フォーマット指定子は、単一の区切り文字としては扱われません。また"<!--"、個々の文字は区切り文字として扱われません(いずれにしても正しい動作ではありません)。空白のみが区切り文字と見なされます。スキャンセットはで利用できますがsscanf()、単一の区切り文字を表す文字のシーケンスではなく、個々の文字のコレクションを取ります。これはinput、最初の空白文字の前のすべてがに割り当てられることを意味しますparsed_data

代わりに使用できますstrstr()

const char* comment_start = strstr(input, "<!--");
char* result = 0;
if (comment_start)
{
    result = malloc(comment_start - input + 1);
    memcpy(result, input, comment_start - input);
    result[comment_start - input] = 0;
}

引数計算の一部として省略できることsizeof(char)が保証されていることに注意してください。1malloc()

于 2012-11-09T09:22:20.037 に答える