完美的指针应用题

dinosaurgy 2019-07-17 21:44:13 4

不会指针的同学们看好了!!!

#include <cstdio>

int main() {
    const char *s =
        "#include <cstdio>%c%cint main() {%c%cconst char *s = %c%s%c;%c%cprintf(s, 10, 10, 10, 9, 34, s, 34, "
        "10, 9, 10, 11);%c}%c";
    printf(s, 10, 10, 10, 9, 34, s, 34, 10, 9, 10, 11);
}

好玩吗?一起来玩指针吧!

{{ vote && vote.total.up }}

共 4 条回复

GUANGJEIZHONGXIN

哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦,牛逼。

dinosaurgy

@GUANGJEIZHONGXIN...

printf("%c",&s);中的引号之内是地址,而指针指向的正好是地址。其中

const char *s =
        "#include <cstdio>%c%cint main() {%c%cconst char *s = %c%s%c;%c%cprintf(s, 10, 10, 10, 9, 34, s, 34, "
        "10, 9, 10, 11);%c}%c";

已经在地址中赋值了(另外,"%c"就是一例),所以这道题考的就是指针的应用.

GUANGJEIZHONGXIN

printf(s, 10, 10, 10, 9, 34, s, 34, 10, 9, 10, 11); 这样也能输出?不应该是printf("%c",s);吗?

dinosaurgy

话说这个OJ为什么没有PHP?

...承认这题PHP轻松水过...

12345678910

你没看错,只要把12345678910打上去,系统就会自动帮你输出。

原理的话,PHP标签外字符会被PHP解释器直接输出(常见于HTML和PHP混写,甚至php的if里出现结束标签+HTML+开始标签能够实现选择性输出HTML),因此此题直接将字符画贴源码里直接交(PHP)能过。