sscanf也可以接受空格

时间:2012-12-17 09:50:36

标签: c scanf

有没有办法强制sscanf不允许额外的空格。

以下代码接受"N_ 234",即使它只接受"N_234"

int r;
unsigned b;
r = sscanf("N_ 234", "N_%u", &b); /* Returns 1 */

使用IAR编译器进行测试。

2 个答案:

答案 0 :(得分:2)

试试这个:

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);

答案 1 :(得分:1)

可能是我的代码对您有帮助:

# 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);为1,则

r输出正确的值,否则b = 0且r为-1(EOF)。

试一试!!


编辑:有可能出现e缓冲区溢出,但可以使用动态分配进行纠正。