What is the difference between sscanf or atoi to convert a string to an integer?

Viewed 135364

gcc 4.4.4 c89

What is better to convert a string to an integer value.

I have tried 2 different methods atoi and sscanf. Both work as expected.

char digits[3] = "34";
int device_num = 0;

if(sscanf(digits, "%d", &device_num) == EOF) {
    fprintf(stderr, "WARNING: Incorrect value for device\n");
    return FALSE;
}

or using atoi

device_num = atoi(digits);

I was thinking that the sscanf would be better as you can check for errors. However, atoi doesn't doing any checking.

6 Answers

To @R.. I think it's not enough to check errno for error detection in strtol call.

long strtol (const char *String, char **EndPointer, int Base)

You'll also need to check EndPointer for errors.

Combining R.. and PickBoy answers for brevity

long strtol (const char *String, char **EndPointer, int Base)

// examples
strtol(s, NULL, 10);
strtol(s, &s, 10);
Related