-5

我发现以下 C++ 源代码:

void victory()
{
  printf("xxxxxxxxxxxxxxxxxxxxxxxx"); //random string
}

int main()
{
    if(0) victory();

    /* code here! */
} 

您的主要目标是在标准输出上打印随机字符串(来自函数胜利)

怎么可能?如何打印随机字符串?这是一个棘手的陷阱,只是为了好奇。最重要的是,我不能使用指针......

规则:
最多 12 个字符。
您不能使用:“main”、“victory”、“asm”、“%”、“*”、“_”、“#”、“/”、“&”。
你只有一个分号。

4

1 回答 1

2

很明显,没有办法以任何远程标准兼容的方式解决这个问题。

由于这被视为一个“安全”问题,这表明使用编译器和操作系统特定的黑客是可以的。考虑到这一点,以下在我的系统上使用gcc

#include <stdio.h>

void victory()
{
    printf("SxxxxxxxxxxxxxxxxxxxxxxE"); //random string
}

int main()
{
    if(0) victory();

    puts(""-25);
} 

""它依赖于编译器在我们试图恢复的字符串文字之后立即放置的事实。这里,25是未知字符串的(已知)长度。

当然,这用巨大的霓虹灯字母写满了UNDEFINED BEHAVIOR 。小心轻放。

于 2013-01-08T14:03:30.620 回答