при компиляции всегда включайте предупреждения, а затем исправляйте эти предупреждения:
Выполнение опубликованного кода через компилятор gcc
приводит к:
gcc -O1 -ggdb -Wall -Wextra -Wconversion -pedantic -std=gnu11 -c "untitled2.c" -I. (in directory: /home/richard/Documents/forum)
untitled2.c: In function ‘main’:
untitled2.c:14:16: warning: passing argument 1 of ‘atoi’ makes pointer from integer without a cast [-Wint-conversion]
t = atoi(s[i]);
^
In file included from /usr/include/features.h:424:0,
from /usr/include/x86_64-linux-gnu/bits/libc-header-start.h:33,
from /usr/include/stdio.h:27,
from untitled2.c:1:
/usr/include/stdlib.h:361:1: note: expected ‘const char *’ but argument is of type ‘char’
__NTH (atoi (const char *__nptr))
^
untitled2.c:9:3: warning: ignoring return value of ‘fgets’, declared with attribute warn_unused_result [-Wunused-result]
fgets(s,100,stdin);
^~~~~~~~~~~~~~~~~~
Compilation finished successfully.
другими словами, этот оператор :
t = atoi(s[i]);
передает один символ в функцию: atoi()
Но, atoi()
ожидает передачи указателя на массив символов.
Со страницы MAN для atoi()
, синтаксис:
int atoi(const char *nptr);
предлагает: заменить:
t = atoi(s[i]);
printf("%d\n",t);
на:
printf( "%d\n", s[i] );
При этом будет выведено значение ASCII каждого из символов в массиве s[]
. Например, значение ASCII '1' равно 49.
Обратите внимание, что вывод современных компиляторов предупреждает о невозможности проверки возвращаемого значения из C библиотечных функций.