chenlong12580 2014-10-13 16:45 采纳率: 0%
浏览 738

system function can not run correct after modify the enviroment?

#include
#include
#include
#include

int main()
{
char *ptr = NULL;
char path[1024] = {0};
char pathori[1024] = {0};
int ret = 0;

ptr = getenv("PATH");

strcpy(pathori, ptr);

printf("pathori=%s\n", pathori);

setenv("PATH", "/home/chenlong12580/develop/bina", 1);

ret = system("test");
printf("ret=%d\n", ret);

ptr = getenv("PATH");
memset(path, 0, 1024);
strcpy(path, ptr);
printf("path1=%s\n", path);

setenv("PATH", pathori, 1);
ptr = getenv("PATH");
memset(path, 0, 1024);
strcpy(path, ptr);
printf("path2=%s\n", path);

return 0;

}

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-02 21:00
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    这段代码的目的是设置环境变量PATH,然后执行一个命令(在这个例子中是test)。但是,在修改环境变量后,程序无法正确运行。这可能是由于以下原因:

    1. 环境变量在某些情况下可能不会立即生效。例如,如果在用户登录时设置了新的环境变量,那么这些变量可能不会立即生效。

    2. 在使用 system() 函数时,系统调用可能没有正确处理环境变量。例如,system() 函数可能会尝试读取当前目录下的文件来查找命令,而这些文件可能已经不存在了。

    3. 变量 ptrpath 的大小可能不够大以存储完整的路径,这可能导致错误或未预期的行为。

    为了解决这些问题,您可以考虑以下几个解决方案:

    • 使用更安全的方法来管理环境变量,例如使用 setx 命令或者直接在脚本中设置环境变量。
    • 尝试在代码中检查环境变量是否已正确设置,以及是否存在任何错误。
    • 考虑使用 chdir 或者 cd 命令切换到一个新的目录,然后再执行命令。

    以下是修改后的代码示例:

    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
        char *ptr = NULL;
        char path[1024] = {0};
        char pathori[1024] = {0};
        int ret = 0;
    
        ptr = getenv("PATH");
        strcpy(pathori, ptr);
        printf("pathori=%s\n", pathori);
    
        setenv("PATH", "/home/chenlong12580/develop/bina", 1);
    
        ret = system("/bin/test");
        printf("ret=%d\n", ret);
    
        ptr = getenv("PATH");
        memset(path, 0, 1024);
        strcpy(path, ptr);
        printf("path1=%s\n", path);
    
        setenv("PATH", pathori, 1);
        ptr = getenv("PATH");
        memset(path, 0, 1024);
        strcpy(path, ptr);
        printf("path2=%s\n", path);
    
        return 0;
    }
    

    请注意,这个修改后的代码仍然依赖于 system() 函数和环境变量,但应该能够解决您遇到的问题。

    评论

报告相同问题?