C - 使用其他分隔符分隔字符串?

时间:2017-10-20 12:06:48

标签: c string scanf delimiter

我有一个格式为“B1,B3,B4,B6”的字符串,并希望将每个数字分配给一个变量,即num1 =“1”,num2 =“3”,num3 =“4”和num4 =“6”。这个sscanf的实现是否有效?

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

1 个答案:

答案 0 :(得分:0)

不,这不是一个好方法。如果您只想要数字数字,即正常int值,那么请改用"%d"转换运算符,让变量变为正常int个变量然后使用address-of运算符sscanf传递给&。如在

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

如果你另一方面希望将数字作为字符串,那么使用 array 而不是指针:

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只能读取 signle 字符。

除此之外,您应该确保sscanf调用实际上正确地解析了输入。这可以通过检查sscanf 返回

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