修改printf输出

时间:2015-10-06 10:10:16

标签: c printf stdout stdin

#include <stdio.h>
int main(){
   printf("asd");
return 0;
}

任务是在不修改此程序,覆盖或使用define的情况下,在Windows环境中,此程序必须写出:Yourname asd Yourname。 有什么想法吗?

2 个答案:

答案 0 :(得分:1)

你可以这样做(编辑为从stdin读取Yourname):

#include <stdio.h>
#include <string.h>
int main(){
    printf("asd");
    return 0;
}

int printf(const char *__restrict __format, ...)
{
    char str[106], scs[50];
    scanf("%s", &scs);
    strcpy(str,scs);
    puts(strcat(strcat(strcat(strcat(str," "), __format)," "),scs));
    return 1;
}

这是working demo

答案 1 :(得分:0)

您可以通过简单的方式完成此操作。全局对象在静态内存区域创建,它们在执行main之前被分配和初始化,并在执行main之后被释放。以下是您问题的简单答案:

#include<iostream>

struct MyName {
public: 
    MyName() { printf("%s", "GaborRuszcsak\n"); }
    ~MyName() { printf("%s", "\nGaborRuszcsak\n"); }
};

MyName isGaborRuszcsak;

int main(int argc, char** argv){
    printf("asd");
    return 0;
}

希望有所帮助。