imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 06.03.2005, 13:53     # 1
tropico
Guest
 
Сообщения: n/a

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

Здравствуйте.

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

Заранее спасибо.
 
Старый 06.03.2005, 14:51     # 2
crawler
Full Member
 
Регистрация: 11.12.2002
Сообщения: 864

crawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собой
Посмотри help на atoi(), is_int()
crawler вне форума  
Старый 06.03.2005, 15:30     # 3
tropico
Guest
 
Сообщения: n/a

Разобрался.

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

Опции темы

Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


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




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