2012-07-11 35 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