1

私はこのようなコードを持っています

sprintf(data, "%d|Hello world|Ticket|Offset=44|msgId=1050        %d|%d|%d", r+1,header->m_msgId,header->m_sequence,header->m_offset);

ここで、dataはサイズ100のchar配列であり、headerは構造体変数です。

sprintfを使用してこの全体をデータに書き込んだ後、このデータ全体を2つに分割してから、2つの新しい変数にコピーします。

char var1[100],var2[100];

これはsscanfで実行できますが、var1では、

%d|Hello world|Ticket|Offset=44|msgId=1050

一方、var2では、その後の部分が必要です。

%d|%d|%d

.1つの方法は、%[^ \ t}などを実行することですが、この場合、var1内の値は正しいですが、var2内のタブスペースも、3つの%diの最後に奇妙な文字とともに挿入されます。変数データに入力する必要のあるデータ。sscanfのヘルプを使用してこれを行うにはどうすればよいか教えてください。事前に助けてくれてありがとう

4

2 に答える 2

4

以下は、必要な動作を提供します。

#include <stdio.h>
#include <string.h>

int main()
{
    char arr[] = "18|Hello world|Ticket|Offset=44|msgId=1050\t12|4|5";
    char var1[100];
    char var2[100];

    if (2 == sscanf(arr, "%[^\t]%s", var1, var2))
    {
        printf("var1[%s]\nvar2[%s]\n", var1, var2);
    }
    return 0;
}

デモについては、 http://ideone.com/j8am8を参照してください。

于 2012-07-11T13:21:01.927 に答える
0

これを試して...

char data[]="%d|Hello world|Ticket|Offset=44|msgId=1050        %d|%d|%d";
char var1[100], var2[100];
char *szField1, *szField2;

// extract var1
szField1 = strstr(data, "  " );
memset( var1, 0, sizeof( var1 ) );
strncpy( var1, data, szField1 - data );

// extract var2
szField2 = strstr( szField1, "%" );
memset( var2, 0, sizeof( var2 ) );
strcpy( var2, szField2 );
于 2012-07-11T13:05:33.527 に答える