c - sscanf 无法检测到数字 C

标签 c scanf

所以我使用 sscanf 用 C 语言编写了这个函数:

int parse_charstar(char *pointah)
{
    int numbeh;
    int retaahn = sscanf(pointah,"%*[^0123456789]%d",&numbeh);   

    printf("\n prent deeh numbeeh %d \n",numbeh);

    return numbeh;
}

我想从字符串中获取一个数字(如果有的话),例如。

"hello 121"
number: 121

目前使用上面的方法我得到的是垃圾值,有人可以帮忙吗?

编辑:

今天我发现了一些有趣的事情。显然,这就是正在发生的事情!

正如 luoluo 和 dasblinkenlight 所指出的那样,我的代码从一开始就没有错误。

问题是我如何调用该程序。我在 Linux 上。

我把它称为:

parse_charstar("1000");

输出:

prent deeh numbeeh -1634553883

我尝试过:

parse_charstar(" 1000 "); // added spaces

输出?

prent deeh numbeeh 1000

准确。

现在有人可以告诉我为什么会发生这种情况吗?

编辑!!!

见鬼去吧,伙计们,使用 strtol ,它就是为这个东西而生的。

http://www.cplusplus.com/reference/cstdlib/strtol/

从上面页面无耻地复制代码:

#include <stdio.h>      /* printf */
#include <stdlib.h>     /* strtol */

int main ()
{
  char szNumbers[] = "2001 60c0c0 -1101110100110100100000 0x6fffff";
  char * pEnd;
  long int li1, li2, li3, li4;
  li1 = strtol (szNumbers,&pEnd,10);
  li2 = strtol (pEnd,&pEnd,16);
  li3 = strtol (pEnd,&pEnd,2);
  li4 = strtol (pEnd,NULL,0);
  printf ("The decimal equivalents are: %ld, %ld, %ld and %ld.\n", li1, li2, li3, li4);
  return 0;
}

最佳答案

您的 sscanf 的更受限制的版本是

int retaahn = sscanf(pointah,"%*[^0-9]%d%*[^0-9]",&numbeh);

请注意,这不会更改格式字符串中的任何内容。我刚刚使用 0-9 来提及范围,并添加了第二个 %*[^0-9] 以使事情更加明确。

Currently using the above I'm getting garbage values, can someone help?

可能是因为您没有向函数传递正确的参数。只需做一个

printf("pointah : %s\n",pointah);

查看传递的内容或设置断点并调试程序。

关于c - sscanf 无法检测到数字 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43749891/

相关文章:

c - 当我写 "i == 0"时 for 循环有效,但在 C 中写 "i = 0"时无效?

c - GCC 不支持简单的整数常量表达式?

c - MPI 基本示例不起作用

C 程序在创建几个线程后终止

c - scanf 读取 "Enter"键

c++ - 如何使用 sscanf 扫描由 `/` 分隔的两个字符串?

c - 为什么 scanf 不允许更多输入?

c - 使用 realloc 强制重定位

c - fscanf 读入双数组奇怪值

C无限做while循环