2011-08-18 61 views
0

我正在編寫單元測試,我需要重寫「static const char [] path =」/ some/hardcoded/path「中的路徑來執行其他操作。我想它可以通過LD_PRELOAD做,但它要求我創建另一個庫是否有任何其他簡單的方法來做到這一點替換靜態常量字符數組的值

+6

它是'const'。不要這樣做。如果您有一些功能需求,請聯繫作者並提出您的看法。否則,處理它。抱歉。 –

+0

我同意。應該拍攝硬編碼路徑的人! –

回答

1

躲在它的選擇是這樣的:??

static const char* path = "..."; 

void f() 
{ 
#if UNIT_TESTING 
    static const char* path = "Ha!"; 
#endif 
    cout << path; 
} 
0

更改在許多系統中,實現定義的響應是放棄核心(分段錯誤),也就是說,許多聯合國以前常見的範例IX應用程序應具有硬編碼但可配置的路徑名。這個名字是在編譯時設置,而不是執行時間:

static const char * path = SOME_PREPROCESSOR_NAME; 
3

註釋出來,並添加你自己的路。

你不想un- const東西。

如果需要,把它變成一個預處理塊:

#ifndef __UNIT_TEST 
    static const char[] path = "/some/hardcoded/path"; 
#else 
    static const char[] path = "/some_other/hardcoded/path"; 
#endif 

然後,它會不會原來的程序員的系統上出現故障或者。

0

如果你想成爲哈克,並沒有辦法直接更改信號源,它可以使用的mprotect()在Unix和Win32上VirtualProtect的(),以使該陣列可讀/寫的頁/可執行文件最後的手段。

0

如果您的系統支持它,請將硬編碼文件作爲您想要的符號鏈接。類似於ln -T /where/i/want/file /some/hardcoded/path/file