c - Weird behavior of printf() calls after usage of itoa() function -


i brushing c skills.i tried following code learning usage of itoa() function:

#include<stdio.h> #include<stdlib.h>  void main(){      int x = 9;     char str[] = "ankush";     char c[] = "";      printf("%s printed on line  %d\n",str,__line__);     itoa(x,c,10);     printf(c);     printf("\n %s \n",str); //this statement printing nothing     printf("the current line %d",__line__); } 

and got following output:

ankush printed on line 10 9                       //here nothing printed current line 14 

the thing if comment statement itoa(x,c,10); code above mentioned statement printed , got following output:

ankush printed on 10 line   ankush   //so got printed current line 14 

is behavior of itoa() or doing wrong. regards.

as folks pointed out in comments, size of array represented variable c 1. since c requires strings have null terminator, can store string of length 0 in c. however, when call itoa, has no idea buffer you're handing 1 character long, happily keep writing out digits memory after c (which memory contains str).

to fix this, declare c of size large enough handle string plan put it, plus 1 null terminator. largest value 32-bit int can hold 10 digits long, can use char c[11].

to further explain memory overwriting situation above, let's consider c , str allocated in contiguous regions on stack (since local variables). c might occupy memory address 1000 (because 0 character string plus null terminator), , str occupy memory address 1001 through 1008 (because has 6 characters, plus null terminator). when try write string "9" c, digit 9 put memory address 1000 , null terminator put in memory address 1001. since 1001 first address of str, str represents zero-length string (null terminator before other characters). that's why getting blank.


Comments

Popular posts from this blog

PHPMotion implementation - URL based videos (Hosted on separate location) -

javascript - Using Windows Media Player as video fallback for video tag -

c# - Unity IoC Lifetime per HttpRequest for UserStore -