2016-03-05 69 views
-3

我有分裂(與sscanf的回答是或者)一個char *這種格式:sscanf的格式的麻煩,避免:

First_Line1: This is the 1st lineFirst_Line: This-is_the_first-line123

我只是需要把內容在兩個變量中,一個包含「:」之前的內容,另一個包含「:」之後的內容。

請注意,在「:」之前和之後可能會有數字和特殊字符。

到目前爲止,我已經嘗試了一些例子:

sscanf(cab, "%[a-zA-Z]%*[:] %[a-zA-Z]", &cab.name, &cab.value); 
sscanf(cab, "%s %*[:] %s", &cab.name, &cab.value); 

和很多我不記得了。 (我實際上並不關心特殊字符,只是想將它分成兩部分)

我無法使用任何格式參數正常工作。請幫忙。謝謝。

+1

請顯示您嘗試過的代碼,然後我們會建議如何更改它。人們不希望被期望寫出整個事情。 – BoBTFish

+1

考慮在整行上使用'strtok'。 –

+0

對不起,現在就做。我嘗試過很多格式,我甚至都不記得所有的格式。 – dunnomuch

回答

1

我從來沒有使用這種格式之前,但我很快就制定了這一點:

#include <stdio.h> 

int main(void) 
{ 
    char inp [] = "one two: three four"; 
    char str1[100] = ""; 
    char sep = ' '; 
    char str2[100] = ""; 

    if (sscanf(inp, "%[^:]%c %[^\0]", str1, &sep, str2) != 3) 
     return 1; 

    printf("'%s'\n", str1); 
    printf("'%s'\n", str2); 
    return 0; 
} 

計劃輸出('添加到清晰顯示字符串的程度):

'one two' 
'three four' 

請請注意您的一個特定錯誤:&cab.name等不應該有&,因爲您提供的值將會是指針或衰減到指針。

編輯:

正如@ user3121023指出的(因爲已刪除的留言),格式爲%[^\0]將提前終止格式字符串。所以我建議在輸入數據中使用沒有出現的字符。由於它從來沒有找到,其餘的輸入被採取。

if (sscanf(inp, "%[^:]%c %[^\7]", str1, &sep, str2) != 3) 
    return 1; 
+0

它的工作,非常感謝你 – dunnomuch

+0

@ user3121023感謝您的評論,請參閱我的**編輯**。 –