我有一个格式为“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'等都是非简化的指针。 –