【发布时间】:2017-05-05 08:30:18
【问题描述】:
我正在用 c 编写一个程序。传入的字符串是这样的*H1W000500,这是一个合法的字符串,我将*H1W之后的字符串内容,即000500复制到一个整数类型。
但是如果字符串不合法,我想过滤这个字符串。例如*H1W..... 或*H1W~@#$,如果字符串不合法,请勿复制内容并跳过。仅当字符串如上所述合法时才复制内容。
这就是我正在做的事情,但只要存在不相关的字符串,它就会复制零值,这是不可取的。
char ReceivedData[50];
unsigned int Head1Weight;
p = strstr(ReceivedData, "*H1W");
if(p)
{
Head1Weight = strtoul(p+4,&ptr,10);
}
【问题讨论】:
-
所以...之后真的检查
ptr?我的意思是,这就是它的用途。 -
还要注意
strtoul会转换成unsigned long,所以Head1Weight应该声明为这种类型。 -
查看 melpomene 的评论:
if(ptr - p == 10) { /* success */ }(如果您需要正好 6 位数字)。此外,您可能希望字符串以空格结尾:if(*ptr == 0 || isspace(*ptr)) { /* success */ }。 -
什么?我不太明白:可能你的意思是:if (sscanf(ptr,"*H1W%d",&intvar)==1) /*OK*/ else /*NOT OK*/
-
一个有效的字符串必须正好有 6 位数字吗?如果不能,什么是允许的?整数可以有符号,前导空格吗?
Head1Weight是否必须适合unsigned范围,即使 `unsigned 是 16 位?