ProgrammingThis forum is for all programming questions.
The question does not have to be directly related to Linux and any language is fair game.
Notices
Welcome to LinuxQuestions.org, a friendly and active Linux Community.
You are currently viewing LQ as a guest. By joining our community you will have the ability to post topics, receive our newsletter, use the advanced search, subscribe to threads and access many other special features. Registration is quick, simple and absolutely free. Join our community today!
Note that registered members see fewer ads, and ContentLink is completely disabled once you log in.
If you have any problems with the registration process or your account login, please contact us. If you need to reset your password, click here.
Having a problem logging in? Please visit this page to clear all LQ-related cookies.
Get a virtual cloud desktop with the Linux distro that you want in less than five minutes with Shells! With over 10 pre-installed distros to choose from, the worry-free installation life is here! Whether you are a digital nomad or just looking for flexibility, Shells can put your Linux machine on the device that you want to use.
Exclusive for LQ members, get up to 45% off per month. Click here for more info.
main(int argc, char argv)
{
startup(); \* defined elsewhere *\
cout << (int)'0' << '\n';
aPad_WriteInt(stem, GPMOD, 2, argv); \* where im using the arg as an int*\
aIO_MSSleep(io, 400, NULL);
shutdown(); \* defined elsewhere *\
}
kindof irrelevant since i don't seem to have iostream.h on my system.
looking into that now.
And in general, if you want to convert an array of char's to a number you can use strtol:
Code:
STRTOL(3) Linux Programmer's Manual STRTOL(3)
NAME
strtol, strtoll, strtoq - convert a string to a long integer
SYNOPSIS
#include <stdlib.h>
long int
strtol(const char *nptr, char **endptr, int base);
long long int
strtoll(const char *nptr, char **endptr, int base);
DESCRIPTION
The strtol() function converts the initial part of the string in
nptr to a long integer value according to the given base, which
must be between 2 and 36 inclusive, or be the special value 0.
The string must begin with an arbitrary amount of white space (as
determined by isspace(3)) followed by a single optional `+' or `-'
sign. If base is zero or 16, the string may then include a `0x'
prefix, and the number will be read in base 16; otherwise, a zero
base is taken as 10 (decimal) unless the next character is `0', in
which case it is taken as 8 (octal).
The remainder of the string is converted to a long int value in
the obvious manner, stopping at the first character which is not a
valid digit in the given base. (In bases above 10, the letter `A'
in either upper or lower case represents 10, `B' represents 11,
and so forth, with `Z' representing 35.)
If endptr is not NULL, strtol() stores the address of the first
invalid character in *endptr. If there were no digits at all,
strtol() stores the original value of nptr in *endptr (and returns
0). In particular, if *nptr is not `\0' but **endptr is `\0' on
return, the entire string is valid.
The strtoll() function works just like the strtol() function but
returns a long long integer value.
RETURN VALUE
The strtol() function returns the result of the conversion, unless
the value would underflow or overflow. If an underflow occurs,
strtol() returns LONG_MIN. If an overflow occurs, strtol()
returns LONG_MAX. In both cases, errno is set to ERANGE. Pre-
cisely the same holds for strtoll() (with LLONG_MIN and LLONG_MAX
instead of LONG_MIN and LONG_MAX).
ERRORS
ERANGE The resulting value was out of range.
EINVAL (not in C99) The given base contains an unsupported value.
The implementation may also set errno to EINVAL in case no conver-
sion was performed (no digits seen, and 0 returned).
NOTES
In locales other than the "C" locale, also other strings may be
accepted. (For example, the thousands separator of the current
locale may be supported.)
BSD also has
quad_t
strtoq(const char *nptr, char **endptr, int base);
with completely analogous definition. Depending on the wordsize
of the current architecture, this may be equivalent to strtoll()
or to strtol().
CONFORMING TO
strtol() conforms to SVID 3, BSD 4.3, ISO 9899 (C99) and POSIX,
and strtoll() to ISO 9899 (C99) and POSIX 1003.1-2001.
SEE ALSO
atof(3), atoi(3), atol(3), strtod(3), strtoul(3)
GNU 2002-05-30 STRTOL(3)
itsme@dreams:~/C$ ./myatoi 37
stdlib's atoi(): 37
my my_atoi(): 37
itsme@dreams:~/C$ ./myatoi -37
stdlib's atoi(): -37
my my_atoi(): -37
itsme@dreams:~/C$ ./myatoi -37.3
stdlib's atoi(): -37
my my_atoi(): -37
itsme@dreams:~/C$ ./myatoi -37.8
stdlib's atoi(): -37
my my_atoi(): -37
itsme@dreams:~/C$
Why 37? I don't know. Should work fine though with most any number that's less than INT_MAX (positive or negative). It's not a very "safe" function though. For instance, the 'rv' and 'mult' variables might overflow if the string of digits is substantially long.
The basic premise is simple. Start with the right-most digit and every time you move left through the string multiply the 'mult' variable by 10. So in the 1's place the digit is multiplied by 1, the 10's place gets multiplied by 10, and so on.
So in the examples above, 'rv' ends up being 7 + 30.
As some advice, do not use atoi(3), but instead the strto*(3) functions -- as noted in the manual pages, atoi(3) does not support proper error checking on it's return value.
LinuxQuestions.org is looking for people interested in writing
Editorials, Articles, Reviews, and more. If you'd like to contribute
content, let us know.