Correct usage of strtol

c, c++

Solution

You're almost there. `temp` itself will not be null, but it will point to a null character if the whole string is converted, so you need to dereference it:

if (*temp != '\0')

Problem

The program below converts a string to long, but based on my understanding it also returns an error. I am relying on the fact that if `strtol` successfully converted string to long, then the second parameter to `strtol` should be equal to NULL. When I run the below application with 55, I get the following message. ``` ./convertToLong 55 Could not convert 55 to long and leftover string is: 55 as long is 55 ``` How can I successfully detect errors from `strtol`? In my application, zero is a valid value. Code: ``` #include <stdio.h> #include <stdlib.h> static long parseLong(const char * str); int main(int argc, char ** argv) { printf("%s as long is %ld\n", argv[1], parseLong(argv[1])); return 0; } static long parseLong(const char * str) { long _val = 0; char * temp; _val = strtol(str, &temp, 0); if(temp != '\0') printf("Could not convert %s to long and leftover string is: %s", str, temp); return _val; } ```

Original source

Related problems