所以我使用sscanf在
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;
}
答案 0 :(得分:0)
sscanf
的更受限制的版本将是
int retaahn = sscanf(pointah,"%*[^0-9]%d%*[^0-9]",&numbeh);
请注意,这不会更改格式字符串中的任何内容。我刚刚使用0-9
来提及范围,并添加了第二个%*[^0-9]
以使事情更加明确。
目前使用上面我得到的垃圾值,可以有人 帮助
可能是因为你没有将正确的参数传递给函数。做一个
printf("pointah : %s\n",pointah);
查看传递的内容或设置断点并调试程序。
答案 1 :(得分:0)
因为我的代码从来没有错,所以我的问题是我是如何调用这个函数。
这就是我解决它的方法:
我把它称为:
parse_charstar("1000");
我试过了:
parse_charstar(" 1000 "); // added spaces
它有效!
检查我的编辑内容以获取更多信息!!