View Full Version : FAQ atoi does it work like this (C)
Unregistered
10-19-2001, 05:35 PM
Hi guys,
Does atoi work like this: it scans an array element by element 0=49 1=50 2=51 converts these ascii values 49 50 and 51 into there digit equivalents and add each one to an identifier/varriable.
Thanks learner(wanting to be a master).
quzah
10-19-2001, 05:48 PM
No. It doesn't.
x = atoi( "32" );
printf("%d", x ); /* this prints 32 */
atoi( ) takes a string of numbers and translatest it directly into the integer value of the string, as shown above.
Quzah.
QuestionC
10-19-2001, 10:12 PM
Okay, let's say this is the program...#include <stdlib.h>
main ()
{
char a[4];
int i;
a = {49, 50, 51, 0};
// 49 = '1', 50 = '2', 51 = '3', 0 = '\0'
// So a is the string "123"
i = atoi (a)
// Now i is the integer value 123
return;
}The 0 is very important, as atoi is meant for reading a 0 terminated character string. That is to say, if instead I used a[3] = {49, 50, 51}, then atoi(a) would have just kept reading for integer values in the memory past a[3] because it hadn't yet encounted the string terminator... '\0'.
Unregistered
10-20-2001, 10:53 AM
Originally posted by QuestionC
Okay, let's say this is the program...#include <stdlib.h>
main ()
{
char a[4];
int i;
a = {49, 50, 51, 0};
// 49 = '1', 50 = '2', 51 = '3', 0 = '\0'
// So a is the string "123"
i = atoi (a)
// Now i is the integer value 123
return;
}The 0 is very important, as atoi is meant for reading a 0 terminated character string. That is to say, if instead I used a[3] = {49, 50, 51}, then atoi(a) would have just kept reading for integer values in the memory past a[3] because it hadn't yet encounted the string terminator... '\0'.
a = {49, .....}???
you try to compile this?
probably not!
any way this is not the meaning of atoi(ascii to integer),
void main(void)
{
char *a;
a = "49";
printf("%d",atoi(a));
}
output:
49 press any key to continue...
QuestionC
10-20-2001, 04:47 PM
Sorry, my post was intended to just get the spirit of atoi across as code, not as a program. Here's the code, fixed up to compile, and producting some output.#include <stdlib.h>
main ()
{
char a[4] = {49, 50, 51, 0};
int i;
printf ("a represented as a string is... %s\n", a);
printf ("a represented as an int is... %d\n", a);
// 49 = '1', 50 = '2', 51 = '3', 0 = '\0'
// So a is the string "123"
i = atoi (a);
printf ("atoi(a) as an int is... %d\n", i);
printf ("atoi(a) as a string is... %s\n", i);
// Now i is the integer value 123
return;
}Looking at your code... well, here's the thing...char *a = "49";is equivalent (kinda) toa[3] = {52, 57, 0};and that's pretty much the difference between my code and yours. 52 is the ASCII value for '4', 57 is the ASCII value for '9', and 0 is the string terminator. Similarlychar a[4] = {49, 50, 51, 0};is the same aschar * a = "123"
*Note to self... use atoi and pointer arithmatic to perform divisions in next ofuscated code contest*
quzah
10-20-2001, 11:13 PM
> return;
Just to nit pick...you forgot to return a value! ;)
Quzah.
vBulletin® v3.7.0, Copyright ©2000-2008, Jelsoft Enterprises Ltd.