2017-10-20 115 views
-4

我有一個格式爲「B1,B3,B4,B6」的字符串,並希望將每個數字分配給一個變量,即num1 =「1」,num2 =「3」,num3 =「4」,num4 = 「6」。 sscanf的這個實現是否有效?C - 使用其他分隔符分隔字符串?

char *num1; 
char *num2; 
char *num3; 
char *num4; 
sscanf(str, "B%s,B%s,B%s,B%s", num1, num2, num3, num4); 
+0

你爲什麼不先嚐試一下自己,然後* *張貼關於您可能遇到的任何問題,一個問題嗎? – ilim

+0

運行上面的代碼後你得到了什麼輸出? – LethalProgrammer

+0

簡答:沒有。而且你的代碼無論如何都是錯誤的,因爲'num1'等都是非簡化的指針。 –

回答

0

沒有,這不是一個真正的好方法。如果你只是想在數字的,即正常int值,然後使用"%d"轉換操盤手,和你的變量是正常的int變量,然後您可以使用該地址的運營商&傳遞給sscanf。作爲

int num1; 
int num2; 
int num3; 
int num4; 
sscanf(str, "B%d,B%d,B%d,B%d", &num1, &num2, &num3, &num4); 

如果您在另一方面數字字符串,然後用陣列代替指針:

char num1[2]; // Two characters is enough for a single-character string, plus terminator 
char num2[2]; 
char num3[2]; 
char num4[2]; 
sscanf(str, "B%1s,B%1s,B%1s,B%1s", num1, num2, num3, num4); 

格式"%1s"告訴sscanf爲只讀一個標語字符。


除此之外,您應該確保sscanf調用實際上正確地解析了輸入。這可以通過檢查什麼sscanf回報來完成:

if (sscanf(str, "B%d,B%d,B%d,B%d", &num1, &num2, &num3, &num4) == 4) 
{ 
    // All okay 
} 
else 
{ 
    // Something went wrong 
} 
+0

不確定OP是否想要這個。他可能需要這個'char * num1 =「1」'而不是'int num1 = 1'。問題標題也讓我相信他想要字符串。 –