#include <stdio.h>
char*s="char*s=%c%s%c;main(){printf(s,34,s,34);}";
main()
{
printf(s,34,s,34);
}
outputs..
char*s="char*s=%c%s%c;main(){printf(s,34,s,34);}"; main(){printf(s,34,s,34);}";
how does this work???
|
Mentor
|
![]() |
| 27Nov2012,04:44 | #2 |
|
It's all in the printf format string. The first parameter to printf is s, the string itself.
So this is equivalent to: Code:
#include <stdio.h>
char*s="char*s=%c%s%c;main(){printf(s,34,s,34);}";
main()
{
printf("char*s=%c%s%c;main(){printf(s,34,s,34);}",34,s,34);
}
%c=>34 %s=>s again %c=>34. 34 is the ASCII code for ". |
|
Go4Expert Member
|
|
| 27Nov2012,18:07 | #3 |
|
ok..then for first %s...char*s=%c%s%c;main(){printf(s,34,s,34);} is printed..
then for %c .. " is printed... then for the next %s..y only.. main(){printf(s,34,s,34);} is printed instead of entire char *s??? |
|
Mentor
|
![]() |
| 27Nov2012,19:10 | #4 |
|
Sorry, don't understand. What output are you expecting and why?
|
|
Go4Expert Member
|
|
| 27Nov2012,19:19 | #5 |
|
i expect the below to be output..
char*s=%c%s%c;main(){printf(s,34,s,34);}"char*s=%c %s%c;main(){printf(s,34,s,34);}" |
|
Mentor
|
![]() |
| 27Nov2012,19:33 | #6 |
|
What do you think the following code will display?
Code:
#include <stdio.h>
char*s="AAA %c %s %c BBB";
main()
{
printf(s,'\"',s,'\"');
}
|
|
Go4Expert Member
|
|
| 27Nov2012,19:39 | #7 |
|
i expect this..
AAA %c %s %c BBB" AAA %c %s %c BBB" |
|
Go4Expert Member
|
|
| 27Nov2012,19:42 | #8 |
|
got it...
s indicates... AAA %c %s %c BBB so AAA " AAA %c %s %c BBB " %c mapped to " n %s mapped to AAA %c %s %c BBB.. rite?? |
|
Mentor
|
![]() |
| 27Nov2012,20:59 | #9 |
|
Oh I see. You're thinking that:
Code:
printf("A","B","C");
Code:
printf("Character:%c; String:%s; Number:%d\n", 'f', "Hello world", 27);
Character:f; String:Hello world; Number:27 and the \n means end of line. So if we look at my second bit of code: Code:
char*s="AAA %c %s %c BBB";
main()
{
printf(s,'\"',s,'\"');
}
"AAA "; then a character because of %c; then a string because of %s; then another character because of %c; then " BBB". The %c, %s and %c match to '\"', s itself, and '\"' respectively, so the output will be: "AAA "; then '\"' because of %c; then "AAA %c %s %c BBB" because of %s; then '\"' because of %c; then " BBB". which in total will be: AAA "AAA %c %s %c BBB" BBB". It's a bit confusing because of the double usage of s. Let's specify the format string literally, and use "sausage" instead of duplicating the format string, and X instead of that escaped double quote. Code:
char*s="sausage";
main()
{
printf("AAA %c %s %c BBB",'X',s,'X');
}
IndiraP
like this
|
|
Go4Expert Member
|
|
| 27Nov2012,21:14 | #10 |
|
ya...u r wonderful sir...
![]() thank u sir..i got it well...
|


