Como converter uma cadeia para inteiro em C?
Estou a tentar descobrir se existe uma forma alternativa de conversão de cordel em inteiro em C.
Eu regularmente padrão o seguinte no meu código.
char s[] = "45";
int num = atoi(s);
Então, há uma maneira melhor ou outra?
235
3
Há
strtol
que é melhor IMO. Eu também já tive um gosto emstrtonum
, então use-o se você o tiver (mas lembre-se que's não é portátil):EDIT
Você também pode estar interessado em
strtoumax
estrtoimax
, que são funções padrão no C99. Por exemplo, você poderia dizer:De qualquer forma, afaste-se do
atoi
:Don't utilizar funções do grupo
ato...
. Estas estão quebradas e são praticamente inúteis. Uma solução moderadamente melhor seria utilizar osscanf
, embora também não seja perfeito.Para converter string em inteiro, funções do grupo
strto...
devem ser utilizadas. No seu caso específico, seria a funçãostrtol
.Sim, você pode armazenar o inteiro diretamente:
Se você precisa analisar uma string,
atoi
oustrol
vai ganhar o "menor quantidade de código" concurso.