ansi c: преобразование argv в int - PullRequest
0 голосов
/ 25 января 2010

привет, я хотел преобразовать argv в ansi-c в int. я не уверен в нескольких вещах ...

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

давайте предположим, что моя программа работает следующим образом ./a input1 input2.

давайте в этом случае предположим, что мои input1 = 12345 и input2 = 67890

Я не хочу использовать Atoi. я хотел преобразовать все это самостоятельно. например, когда я вызываю argv [1], он равен только «12345» или возможно, что он может быть «12345»? то есть может ли он иметь пробелы с любой из его сторон?

проблема с atoi и sscanf заключается в том, что если мой input1 = "0" и input1 = "abc"

тогда atoi и sscanf вернут 0, если я ошибаюсь, поправьте меня ... спасибо!

Ответы [ 3 ]

6 голосов
/ 25 января 2010

Преобразование строки в целое число в стандартной библиотеке C выполняется функцией strtol (или другими функциями из группы strto...). Забудьте о atoi и sscanf - эти функции не предоставляют средств для обнаружения ошибок и / или защиты от переполнения.

Возможность получения пробелов вокруг аргумента зависит от системных соглашений о прохождении начальных и конечных пробелов и, конечно, от того, что фактически было передано пользователем. Обычно разные ОС предоставляют способ пропустить эти пробелы, если пользователь хочет это сделать. Поэтому вам решать, считаете ли вы такой ввод правильным или ошибочным.

strtol будет по существу разрешать (и игнорировать) начальные и конечные пробелы. То же самое верно для atoi и sscanf.

3 голосов
/ 25 января 2010

Если вы действительно хотите сделать это самостоятельно, вам нужно перебрать строку, проверив, что каждый символ является цифрой.Давайте предположим, что вы используете ASCII:

char *str = "624532";
int index = 0;
int value = 0;
while(str[index]) {
    if(str[index] >= 48 && str[index] < 58) {
        value = (value * 10) + (str[index] - 48);
    }
    index++;
}

Убедитесь, что вы используете строку с нулевым символом в конце, или это будет выполняться вечно.Это также не будет очень полезно, если ваш вклад искажен.

1 голос
/ 25 января 2010

Как насчет scanf тогда?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...