CSC209H Worksheet: Error Checking
Type in the following program and run it to find out what happens when you try to call strtol on different strings.
#include
#include
#include
#include
int main(int argc, char **argv) {
char *next = NULL;
errno = 0;
long longi = strtol(argv[1], &next, 0);
int i = longi;
printf(“longi: %ld\n”,longi);
printf(“i: %d\n”,i);
printf(“next is |%s|\n”,next);
if(errno != 0) {
perror(“strtol”);
}
return 0; }
argv[1]
returned (longi)
int (i)
next
errno / perror() message
¡°42¡±
42
42
¡°¡±
0
¡°209S¡±
209
209
¡°S¡±
0
¡°0¡±
0
0
¡°¡±
0
¡°seven¡±
0
0
¡°seven¡±
0 or Invalid argument
¡°29.9¡±
29
29
¡°.9¡±
0 or Invalid argument
¡°B52¡±
0
0
¡°B52¡±
0 or Invalid argument
¡°9876543219876543219¡±
9223372036854775807
-1
¡°¡±
Result too large
¡°-32¡±
-32
-32
¡°¡±
0
¡°0x41¡±
65
65
¡°¡±
0
Note About Solutions: On some machines, strtol will set errno when no conversion takes place, but on others (like teach.cs), it just returns 0 and doesn¡¯t move next. Look at the man page to determine the behaviour of a particular implementation of strtol.