藍森林首頁 | 返回主頁 | 本站地圖 | 站內搜索 | 聯繫信箱 |
 您目前的位置:首頁 > 自由軟件 > 技術交流 > 應用編程


    

藍森林 http://www.lslnet.com 2006年6月6日 10:18


如何使編譯後的程序運行時將源程序原樣打印出來

如何使編譯後的程序運行時將源程序原樣打印出來

如何使編譯後的程序運行時將源程序原樣打印出來

用宏??
是不是腦筋急轉彎?

如何使編譯後的程序運行時將源程序原樣打印出來

不是的,是一個競賽題目

如何使編譯後的程序運行時將源程序原樣打印出來

那麼源程序在不在硬盤裡,
還是只有可執行程序,沒有源程序。
如果源程序存在,倒可是打印出來。

如何使編譯後的程序運行時將源程序原樣打印出來

[code]char s[] ={
10, 10, 105, 110, 116, 10, 109, 97, 105, 110, 32, 40, 41, 123, 10, 9, 105, 110, 116, 32, 105, 59, 10, 10, 9, 112, 117, 116, 115, 32, 40, 34, 99, 104, 97, 114, 32, 115, 91, 93, 32, 61, 123, 34, 41, 59, 10, 9, 102, 111, 114, 32, 40, 105, 61, 48, 59, 32, 115, 91, 105, 93, 59, 32, 105, 43, 43, 41, 10, 9, 9, 112, 114, 105, 110, 116, 102, 32, 40, 34, 37, 100, 44, 32, 34, 44, 32, 115, 91, 105, 93, 41, 59, 10, 9, 112, 114, 105, 110, 116, 102, 32, 40, 34, 48, 125, 59, 34, 41, 59, 10, 9, 112, 117, 116, 115, 32, 40, 115, 41, 59, 10, 125, 0};

int
main (){
        int i;

        puts ("char s[] ={");
        for (i=0; s[i]; i++)
                printf ("%d, ", s[i]);
        printf ("0};");
        puts (s);
}
[/code]

如何使編譯後的程序運行時將源程序原樣打印出來

[code]
#include <stdio.h>;

#define BUFSZ 4096

main()
{
        int f, r;
        char b[BUFSZ];

        if ( ( f = open( __FILE__, O_RDONLY ) ) >;= 0 ) {
                while ( ( r = read( f, b, BUFSZ ) ) >; 0 )
                        fwrite( b, r, 1, stdout );
                close( f );
        }
}
[/code]

如何使編譯後的程序運行時將源程序原樣打印出來

很明顯,FH的代碼很高明!

如何使編譯後的程序運行時將源程序原樣打印出來

兩位老大,能不能解釋一下,畢竟這裡新手多

如何使編譯後的程序運行時將源程序原樣打印出來

第一個程序,把數組裡面的數字對應成ascii碼看看是什麼東東。
第二個程序,把當然可執行程序的源文件從硬盤讀出輸出到屏幕。

如何使編譯後的程序運行時將源程序原樣打印出來

如何使編譯後的程序運行時將源程序原樣打印出來

那個__FILE__是什麼意思??
//usr/include/stdio.h
/usr/include/sys/stat.h
/usr/include/sys/types.h
/usr/inlcude/fcntl.h
都沒找到

# grep "__FILE__" /usr/include/stdio.h /usr/include/fcntl.h /usr/include/sys/stat.h /usr/include/sys/types.h

還有頭文件應該是上面的幾個。

如何使編譯後的程序運行時將源程序原樣打印出來

-->
這是一個宏,代表的是這個可執行文件的源文件名。
自己寫個小程序試一試。

如何使編譯後的程序運行時將源程序原樣打印出來

[code]
#include <stdio.h>;
#include <fcntl.h>;
#include <sys/types.h>;
#include <sys/stat.h>;
int
main(void)
{
    printf("%s\n",__FILE__);
    return(0);
}
[/code]

有個疑問,這個程序的通用性怎麼樣?用的編譯器少,對這些瞭解不多。

如何使編譯後的程序運行時將源程序原樣打印出來

好像基本上都支持。

如何使編譯後的程序運行時將源程序原樣打印出來

__FILE__,收到!!

如何使編譯後的程序運行時將源程序原樣打印出來

如何使編譯後的程序運行時將源程序原樣打印出來

呵呵,我這裡也有一個
[code]
#include <iostream.h>;
void main() {char s1[]="#include <iostream.h>; void main() {char s1[]=";
char s2[]="s1[21]=10; cout<<s1<<char(34); s1[21]=32; cout<<s1<<char(34)<<char(59)<<endl; cout<< char[] s2= ; cout<<char(34)<<s2<<char(34)<<char(59)<<endl; s2[77]=10; s2[84]=34; s2[95]=34; cout<<s2;}";
s1[21]=10; cout<<s1<<char(34); s1[21]=32; cout<<s1<<char(34)<<char(59)<<endl;
cout<<"char[] s2="; cout<<char(34)<<s2<<char(34)<<char(59)<<endl; s2[77]=10; s2[84]=34; s2[95]=34; cout<<s2;}

[/code]

如何使編譯後的程序運行時將源程序原樣打印出來

[quote="henryouly"][/quote]-->-->
你為什麼要斷行呢?一口氣寫到底多好啊。



Copyright © 1999-2000 LSLNET.COM. All rights reserved. 藍森林網站 版權所有。 E-mail : webmaster@lslnet.com