How to convert a string to integer in C?
I am trying to find out if there is an alternative way of converting string to integer in C.
I regularly pattern the following in my code.
So, is there a better way or another way?
13 Answers 13
There is strtol which is better IMO. Also I have taken a liking in strtonum , so use it if you have it (but remember it’s not portable):
You might also be interested in strtoumax and strtoimax which are standard functions in C99. For example you could say:
Anyway, stay away from atoi :
The call atoi(str) shall be equivalent to:
except that the handling of errors may differ. If the value cannot be represented, the behavior is undefined.
Robust C89 strtol -based solution
- no undefined behavior (as could be had with the atoi family)
- a stricter definition of integer than strtol (e.g. no leading whitespace nor trailing trash chars)
- classification of the error case (e.g. to give useful error messages to users)
- a «testsuite»
![]()
Don’t use functions from ato. group. These are broken and virtually useless. A moderately better solution would be to use sscanf , although it is not perfect either.
To convert string to integer, functions from strto. group should be used. In your specific case it would be strtol function.
You can code atoi() for fun:
You can also make it recursive, which can fold in 3 lines.
![]()
As already mentioned, the atoi family of functions should never be used in any C program, since they don’t have any error handling.
The the strtol family of functions is 100% equivalent, but with extended functionality: it has error handling and it also supports other bases than decimal, such as hex or binary. Therefore the correct answer is: use strtol (family).
If you for some reason insist on rolling out this function yourself manually, you should try to do something similar to strtol in case there are other symbols present other than the optional sign and digits. It’s quite common that we want to convert numbers that are part of larger string, for example.
A naive version with error handling support might look like the example below. This code is for decimal base 10 numbers only, but otherwise behaves like strtol with an optional pointer set to point at the first invalid symbol encountered (if any). Also note that this code doesn’t handle overflows.
To handle overflows, one can for example add code counting the characters and check that they never go past 10, assuming 32 bit long which can be max 2147483647 , 10 digits.
Как перевести строку в число си
Нередко в программах встречается ситуация, когда надо преобразовать число в строку или строку в число. Для этой цели в стандартной библиотеке языка С определены функции strtol() и snprintf() .
Из строки в число. strtol
Функция strtol() преобразует строку в число типа long int . Функция определена в заголовочном файле stdlib.h и имеет следующий прототип:
str — строка с числом, которое надо преобразовать в числовой тип. Ключевое слово restrict указывает компилятору оптимизировать код и что никакой другой параметр не будет указывать на адрес данного параметра.
str_end — указатель на последний символ строки. Данный параметр можно игнорировать, передавая ему значение NULL
base — основание, система исчисления, в которую надо преобразовать данные (значение от 2 до 36).
Результатом функции является преобразованное число типа long .
Например, преобразуем строку в число в десятичной системе:
В примере выше второй параметр функции никак не использовался — мы ему передавали значение NULL , и функция нормально работала. Однако он может быть полезен, если нам надо получить остаток строки, которая идет после числа:
Из числа в строку. snprintf
Функция snprintf() преобразует число в отформатированную строку. Функция определена в заголовочном файле stdio.h и имеет следующий прототип:
str_buffer — строка, в которую помещается преобразованное число.
buffer_size — максимальное количество символов строки. Функция записывает в строку buffer-size — 1 байт и добавляет концевой нулевой байт
format — задает формат преобразования в строку.
При успешном преобразовании функция возвращает количество символов, записанных в строку (исключая концевой нулевой байт). При неудачном преобразовании возвращается отрицательное число.
How to convert a string to an integer in C
Many candidates are rejected or down-leveled in technical interviews due to poor performance in behavioral or cultural fit interviews. Ace your interviews with this free course, where you will practice confidently tackling behavioral interview questions.
In C, the atoi() function converts a string to an integer.
Syntax
The syntax for the function is given below:
Parameters
The function takes as input the string that is to be converted to an integer.
Return value
If successfully executed, the function returns the integer value.
If the string starts with an alphanumeric character or only contains alphanumeric characters, 0 is returned.
In case the string starts with a numeric character but is followed by an alpha-numeric character, the string is converted to an integer until the occurrence of the first alphanumeric character
Преобразование строки в число и обратно
При составлении программ часто возникает задача получения данных, например, введенных в поле редактирования в числовой форме и вывод результата в текстовое поле.
Число, которое принимает участие в вычислительных процедурах, должно быть представлено в виде строки символов, понятных пользователю, для вывода на экран.
Например, число 235 состоит из трех символов — ‘2’, ‘3’, ‘5’.
Целью рассмотрения данной задачи является приведение символьной строки к соответствующему ей числовому виду.
Для этого нужно разбить символьную строку на значащие разряды и выбрать цифры, соответствующие каждому значащему разряду.
Каждый символ цифры имеет соответствующий ему код в базовой таблице кодировки:
| Символ цифры | Десятичный код | Шестнадцатеричный код | Двоичный код |
| 0 | 48 | 0x30 | 0011 0000 |
| 1 | 49 | 0x31 | 0011 0001 |
| 2 | 50 | 0x32 | 0011 0010 |
| 3 | 51 | 0x33 | 0011 0011 |
| 4 | 52 | 0x34 | 0011 0100 |
| 5 | 53 | 0x35 | 0011 0101 |
| 6 | 54 | 0x36 | 0011 0110 |
| 7 | 55 | 0x37 | 0011 0111 |
| 8 | 56 | 0x38 | 0011 1000 |
| 9 | 57 | 0x39 | 0011 1001 |
В соответствии с приведенной таблицей, значащая часть каждого символа цифры содержится в младшей тетраде битов (младших четырех разрядах). Для получения цифры, соответствующей символу, достаточно произвести операцию:
n = s & 0x0F;
где n — значащая цифра, s — символ цифры. Маска 0x0F позволяет оставить только младшие 4 значащих разряда. Старшие 4 разряда становятся равны 0.
При решении обратной задачи — представления числа в виде текстовой строки — каждая цифра значащего разряда преобразуется в соответствующий ей символ с помощью операции:
s = n | 0x30;
Указанная операция добавляет двоичное значение 0011 в старшие 4 разряда, тем самым формируя код символа из соответствующей значащей цифры.
Реализация на C++

Результат выполнения
