在c中获取变量动态

时间:2010-03-05 12:17:02

标签: c

我在C中有一个要求。

char abc[]="hello";
char hello[]="world";

使用abc我们是否可以在C中获取hello变量的值。 我知道在某些语言中可以使用Perl,Php,Bash,。,

是否可以在C?

6 个答案:

答案 0 :(得分:2)

不,如果不提供某种可以将变量与其名称链接起来的字符串查找表,则无法在C中实现。

答案 1 :(得分:2)

是的你是对的,这可能用其他语言而不是C语言, 因为abc是一个位于某个位置的容器(例如:1000),而hello是另一个容器 容器位于另一个位置(例如:2000),所以我们之间没有联系 这两个数组,

我们不能使值(字符串)指向其他值。 所以最后这不是所有可能的。

答案 2 :(得分:1)

在C语言中这是不可能的,与Perl或Python等更动态的语言不同。但是,重要的是要记住即使在这些语言中也不建议这样做。我还没有看到一段代码,这个代码还很好用。动态语言中可用的eval方法很少使用,而不是动态获取变量名。

答案 3 :(得分:1)

只要C编译器找到了存储底层指针的位置,它就会忘记你给它的名字。动态语言使用像哈希映射这样的数据结构来解决它,它允许您将指针(值)存储在键(名称)下。

另一种选择是读入调试信息。仅当您使用-g(gcc)或其他特定于编译器的选项编译代码时,此选项才可用。请注意,调试格式不是标准化的,因此您需要弄清楚编译器使用的内容以及如何使用它。

答案 4 :(得分:0)

在C中是不可能的。在某些情况下,可以通过反射在java中完成。

答案 5 :(得分:0)

POSIX有几个允许你这样做的函数,假设变量hello是全局的并且不是静态的:

void *handle = dlopen(NULL, RTLD_NOW);
// error handling omitted

printf("%s variable contains value %s", abc, (char *)dlsym(handle, abc));

dlsym()返回值被投放到char *,以便在使用检查printf类似函数的格式字符串的编译器时禁止显示警告。

您需要确保已指定正确的编译器选项,例如在海湾合作委员会的情况下-rdynamic -ldl