LINUX.ORG.RU

atoi для unsigned int


0

0

result = fread ( &rules, sizeof(rules), 1, file); fprintf ( stderr, "\n===\n%s\n===\n", rules); ip = atoi ( rules); fprintf ( stderr, "\n===\n%u\n===\n", ip);

В файле лежит число читаю его, преобразовыаю с помощью atoi и получаю неправильное значение, я думаю дело в том что в файле лежит unsigned int, подскажите, как выйти из этой ситуации?


Вместо atoi воспользовался atoll.

tmp
() автор топика

Как я понял тип rules - char []

fread( &rules, sizeof(rules), 1, file); - после чтения
строка символов в rules не закрыта двоичным нулем.
И atoi и atol будут сканировать строку, пока случайно не
наткнуться на '\0'.

$ cat aaa.c
int main()
{
   char s[]="123456";
   unsigned x;

   sscanf(s,"%2u",&x); /* прочитает максимум 2 символа */
   printf("%u\n",x);
   sscanf(s,"%4u",&x); /* прочитает максимум 4 символа */
   printf("%u\n",x);

   return 0;
}
$ ./aaa
12
1234

kosmonavt
()

читайте man`ы
читайте man`ы
читайте man`ы

В man atoi ДАНА ссылка на ВСЕ родственные функции,
в том числе и на strtoul. Большой секрет - во всех манах
есть раздел "see also". 

да читайте-же наконец man`ы

MKuznetsov ★★★★★
()
Ответ на: комментарий от MKuznetsov

На See also не посмотрел, спасибо.

tmp
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.