0

I want to convert a string "12341234123412341234" to int, but when I use atoi it returns -1

char n[100] = "12341234123412341234"; printf("%d",atoi(n)); 

returns -1

if i use %ld or %lld it returns a junk value

char n[100] = "12341234123412341234"; printf("%lld",atoi(n)); //even if i use %ld it returns the same value 

returns 4294967295

2 Answers 2

3

The function you want is strtol:

char n[100] = "12341234123412341234"; printf("%llu", strtoull(n, NULL, 10)); 
Sign up to request clarification or add additional context in comments.

2 Comments

it returns 9223372036854775807, I want it to return 12341234123412341234 in int.
@CLOUD1015 Ah, the value is too big for a long, but not an unsigned long long, so use strtoull.
1

atoi returns an int. The largest value that can have on a typical 32 or 64 bit architecture (with 32 bit int) is 2147483647. So whatever atoi would return in your case depends on the implementation, but we can be fairly sure that it wont be 12341234123412341234

Trying to tell printf that the parameter passed to it is a long or a long long using "%ld" or "%lld" cannot work either. It doesn't change the fact that atoi returns an int, and that is what get passed to printf. So in addition to that the return value from atoi is not what you want, you are lying about the datatype passed to printf. Nothing good comes out of lying to your computer. Besides long and long long can typically not hold the value 12341234123412341234 either.

An integer type of uint64_t can hold values from 0 to 18446744073709551615 which should work in your case. Typically uint64_t is the same as unsigned long long, and you can use strtoull to parse that:

const char *n = "12341234123412341234"; char *end; unsigned long long v = strtoull(n, &end, 10); printf ("%llu\n", v); 

Naturally, if the string n comes from untrusted sources, a robust program should inspect the pointer end for parse errors.

See man strtoull for more info.

You should also check out INT_MAX and ULLONG_MAX (and other *_MAX) for your architecture.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.