【问题标题】:how to advance sscanf C?如何推进 sscanf C?
【发布时间】:2015-09-20 19:38:01
【问题描述】:

我得到了一个 char* 参数。这基本上是一个由“hex-address new_val”组成的输入流,我需要将这两个值都读取为 int*。我正在使用 sscanf() 并很好地读取十六进制地址,但我无法弄清楚如何提前读取 new_val。无论我尝试什么 - 我都会遇到段错误。这是我目前所拥有的:

 int set_new_val(Cmd *cp, char *arguments) {

  int* addr;

  int* val;

  sscanf(arguments, "%x",&addr);

  sscanf(arguments+?????, "%x",&val);

  /*see if I read it correct*/

  printf("adr = %x || val = %x\n",(unsigned int)*addr,(unsigned int)*val);

  /*not finished*/

  return 0;
}

【问题讨论】:

  • 您为什么不立即阅读它们?您可以在sscanf 中读取多个变量。只需将其添加到格式字符串和参数中即可。
  • 致mszymborski:我没有你能做到。谢谢。
  • 您也可以使用字符串“参数”并使用 strtok() 将每个值格式化为子字符串,然后在 strtok() 的每个返回值/指针上使用 sscanf()

标签: c pointers scanf


【解决方案1】:

int 地址, val; // 不是 int*

sscanf(arguments, "%x %x",&addr, &val);

printf("adr = %x || val = %x\n", addr, val);

【讨论】:

  • 随着经验的增加,“事情过于复杂”的症状往往会消失,尤其是如果您编写了代码,然后几天后再回来查看您所做的工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-01
  • 2021-11-08
  • 2016-02-24
  • 2011-01-08
相关资源
最近更新 更多