4

余分な空白を許可しないように sscanf を強制する方法はありますか。

次のコードは"N_ 234"のみを受け入れる必要がありますが、 を受け入れ"N_234"ます。

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

IAR コンパイラでテスト済み。

4

2 に答える 2

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);
于 2012-12-17T10:49:00.640 に答える
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) を出力します。

試してみる!!


編集: バッファ オーバーランの可能性がありますが、動的割り当てを使用して修正できます。

于 2012-12-17T10:17:42.923 に答える