C++ 替换静态常量字符数组的值

C++ 替换静态常量字符数组的值,c++,c,C++,C,我正在编写单元测试,我需要将“static const char[]path=“/some/hardcoded/path”中的路径重写为其他路径。最好的方法是什么。我认为这可以通过LD_PRELOAD完成,但它需要我创建另一个库。还有其他简单的方法吗?隐藏它是一个选项吗?像这样: static const char* path = "..."; void f() { #if UNIT_TESTING static const char* path = "Ha!"; #endif c

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

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

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

void f()
{
#if UNIT_TESTING
   static const char* path = "Ha!";
#endif
   cout << path;
}
static const char*path=“…”;
void f()
{
#if单元测试
静态常量char*path=“Ha!”;
#恩迪夫

cout隐藏它是一种选择吗?像这样:

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

void f()
{
#if UNIT_TESTING
   static const char* path = "Ha!";
#endif
   cout << path;
}
static const char*path=“…”;
void f()
{
#if单元测试
静态常量char*path=“Ha!”;
#恩迪夫

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

static const char * path = SOME_PREPROCESSOR_NAME;

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

static const char * path = SOME_PREPROCESSOR_NAME;

注释掉它并添加到您自己的路径中

您不想取消常量

如果需要,请将其放入预处理器块:

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

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

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

您不想取消常量

如果需要,请将其放入预处理器块:

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

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

如果您想成为黑客,并且无法直接更改源代码,可以在Unix和VirtualProtect()上使用mprotect()在Win32上使该数组的页面可读/可写/可执行是最后的手段。

如果您想成为黑客,并且无法直接更改源代码,可以在Unix上使用mprotect()和VirtualProtect()在Win32上使该数组的页面可读/可写/可执行是最后的手段。

如果您的系统支持,请将硬编码文件作为指向所需内容的符号链接。类似于
ln-T/where/i/want/file/some/hardcoded/path/file
如果您的系统支持,请将硬编码文件作为指向所需内容的符号链接蚂蚁。类似于
ln-T/where/i/want/file/some/hardcoded/path/file

这是
const
。不要这样做。如果你有一些功能需求,那么就联系作者并提出你的理由。否则,处理它。对不起。我同意。有人放了硬编码的路径应该被枪毙!这是
const
。不要这样做。如果你如果你有一些功能需求,那么联系作者并提出你的理由。否则,处理它。对不起,我同意。如果有人放置硬编码路径,应该被枪杀!