这个函数分配是如何工作的?

How does this function assignment work?

我正在学习一本大学书籍中的一些 C 代码(这本书的主题是 Linux 编程),我遇到了一些我不理解的代码行。我做了一些研究,但我没有在互联网上找到任何东西。有人可以向我解释这段代码吗?

我知道什么是环境变量,我不明白的部分是这个int (*det)(), det()函数是如何工作的。对不起,如果我的标题不正确,我只是不知道如何更好地描述这个主题。

#include<stdio.h>

int main(){
    int (*det)();
    det = getenv("foo");      
    det();
    return 0;
}

*** 感谢您 replies.is 有什么方法可以使这个程序正常运行,例如打印 "hallo"?

一般情况下是行不通的。您正在尝试将 char* (字符串)分配给函数指针。一个合理的编译器会拒绝这个。

然而,并不是所有的编译器都是合理的。如果您确实设法编译并执行了这段代码,那么您已经创建了一个易受环境变量 foo 攻击的程序。这是因为如果您确实设法执行了 foo 的内容,并且它们确实可以在您的机器上执行,那么您将把进程的控制权从 C 程序转移到 foo 中存在的任何代码中].这是不可移植的,可能无法工作,绝对不安全,切勿尝试。

另外,你得到这本书的书,我猜是关于信息安全的。不行就烧掉。

正如有人已经指出的那样

det = getenv("foo"); 

没有多大意义,我希望你的编译器足够聪明,所以 您无法摆脱 it.Below 可能正是您期望在那本书中看到的内容:

#include <stdio.h>
#include <stdlib.h>

extern char* getenv(const char*);
/* The above statement is not mandatory but would make the code more 
 * readable. The keyword "extern" here implies that the function is 
 * is defined elsewhere.
 */

int main(void)
{
    char* (*det)(const char*) = getenv;
    printf("PATH env variable contains : %s\n", (*det)("PATH"));
    /* Replace path with your own environment variable */
    printf("Press any key to continue..\n");
    getchar();
    return 0;
} 

我只是在这里打印一些东西,更改用法以满足您的需要。

参考资料

getenv()原型在这里。