W przypadku atoi problem jest taki, że zwraca 0 w dwóch przypadkach - jeśli ciąg, który konwertujemy faktycznie zawiera "0", oraz gdy konwersja się nie powiedzie.
Cytuj:
The function returns the converted integral number as an int value, if successful. If no valid conversion could be performed then an zero value is returned.
Można jeszcze użyć sscanf:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Po czym sprawdzić wartość zmiennej result zwróconej przez sscanf.
Cytuj:
On success, the function returns the number of items in the argument list successfully filled.
To rozwiązanie radzi sobie ze spacjami, tj. " 5678 " zostanie rozpoznane jako 5678 (result = 1)
Błędny ciąg "afdffadf" zostanie rozpoznany (result = 0).
Niestety wadą tego podejścia jest, że ciąg "1234blabla" zostanie rozpoznany jako 1234 (result = 1)
edit.
Jesli nie interesuje Cię sama wartość, a potrzebujesz tylko informacji czy ciąg jest liczbą typu int
http://stackoverflow.com/a/9753581