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

C - Separating string using other delimiters?

我有一个格式为 "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);

不,这不是一个好方法。如果您只想要数字 a numbers,即正常的 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 只读取一个 signle 字符。


除此之外,您可能应该确保 sscanf 调用确实正确解析了输入。这可以通过检查 sscanf returns:

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