替换static const char数组的值

时间:2011-08-18 23:48:04

标签: c++ c

我正在编写单元测试,我需要将“static const char [] path =”/ some / hardcoded / path“中的路径覆盖到其他地方。最好的办法是什么。我认为可以做到通过LD_PRELOAD,但它需要我创建另一个库。还有其他简单的方法吗?

5 个答案:

答案 0 :(得分:3)

将其注释掉并添加到您自己的路径中。

你不想取消const某事。

如果需要,请将其放入预处理程序块中:

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

然后它也不会在原始程序员的系统上失败。

答案 1 :(得分:1)

隐藏它是一个选项吗?像这样:

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

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

答案 2 :(得分:0)

在执行时更改此类字符串的值是未定义的行为。在许多系统上,实现定义的响应是丢弃核心(分段错误)。也就是说,许多UNIX应用程序中以前常见的范例是具有硬编码但可配置的路径名。名称在编译时而不是执行时设置:

static const char * path = SOME_PREPROCESSOR_NAME;

答案 3 :(得分:0)

如果你想要hacky,并且无法直接更改源代码,可以在Unix上使用mprotect(),在Win32上使用VirtualProtect(),使该数组的页面可读/可写/可执行为不得已。

答案 4 :(得分:0)

如果您的系统支持它,请将硬编码文件设置为您想要的符号链接。像ln -T /where/i/want/file /some/hardcoded/path/file

这样的东西