2012-07-11 27 views
1

我有这样sscanf的写入可变问题

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

,其中数据是大小100和报头的字符阵列的代码是结构变量。

现在使用的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

将1050和%d |%d |%d'分开了什么?必须使用'sscanf()'吗? – hmjd 2012-07-11 12:54:24

+0

发布sscanf()stmts。您正在使用。 – 2012-07-11 13:02:54

+0

@hmjd ya sscanf必须和__tab__分开它。 – Mcolorz 2012-07-11 13:05:02

回答

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进行演示。

+0

这两个字段不能用\ t分隔,而是用空格分隔! – 2012-07-11 13:29:09

+0

@ A.G。,参见OP的评论下面的问题,他在哪里陈述_tab分隔it_。 – hmjd 2012-07-11 13:29:56

+0

\ @hmjd我的道歉..... – 2012-07-11 13:31:53

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); 
+0

我必须在“”中包含多少个空格? – Mcolorz 2012-07-11 13:22:12

+0

@Mcolorz至少2个空格,否则strstr将停在“world | ...” – 2012-07-11 13:25:57