我试图导出变量并使用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.
为什么会发生这种情况?
发布于 2015-09-03 04:42:17
system()运行的子进程不影响调用system()的进程的环境。
因此,system()执行的shell没有在调用进程的环境中设置LINES或COLUMNS,因此getenv()可能返回一对空指针,这在某种程度上导致了…除了printf()经常正确工作,即使一个空指针被传递给它用%s格式化(它为我生成了(null),但这不是C标准规定的行为)。
如果要设置环境变量,则应使用setenv()。您可能会遇到使用putenv()的旧代码,但不应该在新代码中使用。
https://stackoverflow.com/questions/32367026
复制相似问题