【问题标题】:C - Separating string using other delimiters?C - 使用其他分隔符分隔字符串?
【发布时间】:2018-04-01 14:28:41
【问题描述】:

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

【问题讨论】:

  • 您为什么不先自己尝试一下,然后然后就您可能遇到的任何问题提出问题?
  • 运行上述代码后得到了什么输出?
  • 简短回答:不。而且你的代码还是错误的,因为num1等是未初始化的指针。

标签: c string scanf delimiter


【解决方案1】:

不,这不是一个好方法。如果你只想要一个 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);

另一方面,如果您想要将数字作为字符串,则使用 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
}

【讨论】:

  • 不确定 OP 是否想要这个。他可能想要这个char *num1 = "1" 而不是int num1 = 1。而且问题的标题也让我相信他想要字符串。
猜你喜欢
  • 2017-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-18
  • 2014-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多