-1

我正在尝试导出变量并将其读回,getenv()但由于某种原因,它给了我一个分段错误..

#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...
为什么会发生这种情况?

4

1 回答 1

6

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

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

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

于 2015-09-03T04:42:17.857 回答