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 将整个数据写入数据之后,我想将整个数据分成两部分,然后将其复制到两个新变量中

char var1[100],var2[100];

这可以用 sscanf 来完成,但我想要的是在 var1 中我只想要部分直到

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

而在var2中,我想要之后的部分,即

%d|%d|%d

.一种方法是执行 %[^\t} 等等,但在这种情况下,var1 内的值是正确的,但 var2 内的制表符空间也与三个末尾的一些奇怪字符一起插入 %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 回答