所以我使用 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/