我在C中有一个要求。
char abc[]="hello";
char hello[]="world";
使用abc我们是否可以在C中获取hello变量的值。 我知道在某些语言中可以使用Perl,Php,Bash,。,
是否可以在C?
答案 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
。