我有一個格式爲「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);
我有一個格式爲「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);
沒有,這不是一個真正的好方法。如果你只是想在數字的號,即正常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
}
不確定OP是否想要這個。他可能需要這個'char * num1 =「1」'而不是'int num1 = 1'。問題標題也讓我相信他想要字符串。 –
你爲什麼不先嚐試一下自己,然後* *張貼關於您可能遇到的任何問題,一個問題嗎? – ilim
運行上面的代碼後你得到了什麼輸出? – LethalProgrammer
簡答:沒有。而且你的代碼無論如何都是錯誤的,因爲'num1'等都是非簡化的指針。 –