Categories:
.NET (357)
C (330)
C++ (184)
CSS (84)
DBA (2)
General (7)
HTML (4)
Java (574)
JavaScript (106)
JSP (66)
Oracle (114)
Perl (46)
Perl (1)
PHP (2)
PL/SQL (1)
RSS (51)
Software QA (13)
SQL Server (1)
Windows (1)
XHTML (173)
Other Resources:
Using Pointers
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
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, 7587👍, 0💬
Popular Posts:
How To Use Subqueries in the FROM clause? - MySQL FAQs - SQL SELECT Statements with JOIN and Subquer...
How To Control Horizontal Alignment? - XHTML 1.0 Tutorials - Understanding Tables and Table Cells By...
How To Use mysqlbinlog to View Binary Logs? - MySQL FAQs - Server Daemon mysqld Administration If yo...
When should the register modifier be used? Does it really help? The register modifier hints to the c...
How To Specify Two Background Images on a Page? - CSS Tutorials - Page Layout and Background Image D...