IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Программирование (https://www.imho.ws/forumdisplay.php?f=40)
-   -   Си: Механизм фильтрации пользовательского ввода (https://www.imho.ws/showthread.php?t=81136)

tropico 06.03.2005 13:53

Си: Механизм фильтрации пользовательского ввода
 
Здравствуйте.

Проблема:
Код:

int main(int argc, char **argv[])
...

Правильными аргументами к моей программе должны быть две переменные типа int (в argv[1] и argv[2] соответсвенно). Как мне осуществить такую проверку? Мне нужно, чтобы отсекался всякий мусор типа "sdiasJjas7askka00s8&*7a&".
Самое главное: как проверить, является ли значение в argv[1] переменной типа int или нет?

Заранее спасибо.

crawler 06.03.2005 14:51

Посмотри help на atoi(), is_int()

tropico 06.03.2005 15:30

Разобрался.

crawler,
Цитата:

The atoi() function is not thread-safe and also not async-cancel safe.

The atoi() function has been deprecated by strtol() and should not be
used in new code.
Следующий пример демонстрирует то, что я хотел:
Код:

/* (C) Eric Cartman */
#include <stdio.h> 
#include <stdlib.h>
#include <string.h>
#include <errno.h> 

int main( int argc, char** argv )
{
        char *end;
        long int r;
        if( argc > 1 ){
       
                r = strtol( argv[1], &end, 10 );
                if( end[0] != '\0' ){
                        fprintf( stderr, "Garbage input [%s]\n", end );
                        return 2;
                }
               
                if( errno ){
                        fprintf( stderr, "strtol error [%s]\n",
                                strerror( errno ) );
                        return 3;
                }
               
                printf( "Valid argument: %ld\n", r );
               
        } else {
                fprintf( stderr, "Usage: %s [number]\n", argv[0] );
                return 1;
        }
        return 0;
}



Часовой пояс GMT +4, время: 17:37.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.