有没有办法强制 sscanf 不允许额外的空格。
以下代码接受"N_ 234"
,即使它应该只接受"N_234"
:
int r;
unsigned b;
r = sscanf("N_ 234", "N_%u", &b); /* Returns 1 */
用 IAR 编译器测试。
试试这个:
int r;
unsigned b;
char c[20];
r = sscanf("N_ 234", "N_%[0-9]", c); /* Returns 0 */
r = sscanf("N_-234", "N_%[0-9]", c); /* Returns 0 */
r = sscanf("N_1234", "N_%[0-9]", c); /* Returns 1 */
b = atoi(c);
可能是我的代码对你有帮助:
# define SIZE 100
int main(){
int r;
unsigned b = 0u;
char s[SIZE] = {0};
sscanf("N_234", "%[N_0-9]", s);
r = sscanf(s,"N_%u",&b);
printf("%u\n",b);
}
printf("%u\n",b);
如果没有空格且r
为 1,则输出正确的值,否则b
= 0 且r
为 -1 (EOF)。
试试看!!
编辑: 存在 e 缓冲区溢出的可能性,但可以使用动态分配进行纠正。