首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >神秘的getenv()断层

神秘的getenv()断层
EN

Stack Overflow用户
提问于 2015-09-03 04:36:16
回答 1查看 2.1K关注 0票数 0

我试图导出变量并使用getenv()读取它,但出于某种原因,它给了我一个分段错误。

代码语言:javascript
复制
#include<stdio.h>
#include<stdlib.h>

int main(){
    system("export LINES=$(stty size | awk '{print $1}');"
        "export COLUMNS=$(stty size | awk '{print $2}')");
    printf("%s %s\n", getenv("LINES"), getenv("COLUMNS"));
    return 0;
}

我在运行Ubuntu 14.04。

奇怪的是,在gdb上正常运行,编译器输出在编译时没有显示错误,即使使用-Wall -Wextra.

为什么会发生这种情况?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-03 04:42:17

system()运行的子进程不影响调用system()的进程的环境。

因此,system()执行的shell没有在调用进程的环境中设置LINESCOLUMNS,因此getenv()可能返回一对空指针,这在某种程度上导致了…除了printf()经常正确工作,即使一个空指针被传递给它用%s格式化(它为我生成了(null),但这不是C标准规定的行为)。

如果要设置环境变量,则应使用setenv()。您可能会遇到使用putenv()的旧代码,但不应该在新代码中使用。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32367026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档