我有这样的代码
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 tab空间里面也插入了一些奇怪的字符,在三个%的结尾变化必须在我的变量数据中输入的数据格式。 请帮助我,如何使用sscanf.thanks的帮助提前做任何帮助
答案 0 :(得分: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了解演示。
答案 1 :(得分: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 );