Using Pointers

Q

What print out will the folloging code produce?

      main() {
              char *p1=name;
              char *p2;
              p2=(char*)malloc(20);
              memset (p2, 0, 20);
              while(*p2++ = *p1++);
              printf(%s\n,p2);>
      }

✍: Guest

A

The pointer p2 value is also increasing with p1 .
*p2++ = *p1++ means copy value of *p1 to *p2 , then increment both addresses (p1,p2) by one , so that they can point to next address . So when the loop exits (ie when address p1 reaches next character to name ie null) p2 address also points to next location to name . When we try to print string with p2 as starting address , it will try to print string from location after name hense it is null string .

eg :
initially p1 = 2000 (address) , p2 = 3000
*p1 has value "n" ..after 4 increments , loop exits at that time p1 value will be 2004 , p2 =3004 the actual result is stored in 3000 - n , 3001 - a , 3002 - m , 3003 -e we r trying to print from 3004 . where no data is present thats why its printing null .

Answer:empty string.

2007-02-26, 5306👍, 0💬