You are almost right. You need to pass a pointer to strtol , though:
long val = strtol(&test[1], NULL, 10);
or
long val = strtol(test + 1, NULL, 10);
Turning on some compiler warning flags would inform you of your problem. For example, from clang (even without adding additional flags):
example.c:6:23: warning: incompatible integer to pointer conversion passing 'char' to parameter of type 'const char *'; take the address with & [-Wint-conversion] long val = strtol(test[1],NULL,10); ^~~~~~~ & /usr/include/stdlib.h:181:26: note: passing argument to parameter here long strtol(const char *, char **, int); ^ 1 warning generated.
and from GCC:
example.c: In function 'main': example.c:6: warning: passing argument 1 of 'strtol' makes pointer from integer without a cast
Editorial: I think you can see from these error messages why beginners are often advised to use clang rather than GCC.
source share