C ++调用getenv(" LINES")或getenv(" COLUMNS")在Xcode中运行正常,在终端中运行时段错误

时间:2014-03-14 07:18:17

标签: c++ xcode macos clang

我试图在终端中运行时获取程序的窗口大小。在Xcode中,我编辑了方案,以便设置LINESCOLUMNS环境变量在Xcode中运行,并且它在那里运行良好。但是,当我单击Products下的可执行文件并尝试在终端内运行它时,会出现段错误。知道我做错了什么吗?它与我的#includes有什么关系吗?这是我的基本代码:

#include <iostream>

using namespace std ;

int main(int argc, const char * argv[]) {

    char* r = getenv("COLUMNS") ;

    cout << r << endl ;

    return 0;
}

1 个答案:

答案 0 :(得分:1)

如果它在终端中出现段错误,那几乎可以肯定是因为环境变量不存在,因此r将是NULL。所以你的程序最好检查一下:

#include <iostream>
#include <cstdlib>

int main (int argc, const char * argv[]) {
    char *r = std::getenv ("COLUMNS");
    std::cout << ((r == NULL) ? "?" : r) << '\n';
    return 0;
}

从终端运行以下命令,看看你得到了什么:

echo "!$COLUMNS!"

如果它是!!,您需要弄清楚如何设置变量(并导出以使它们看起来像子流程),例如:

COLUMNS=$(tput cols)
export COLUMNS