簡體   English   中英

C程序:getenv在GDB / DDD中返回NULL

[英]C program: getenv return NULL in GDB/DDD

我嘗試在C代碼中調用getenv,這可以在終端中返回正確的env字符串,而在GDB / DDD中返回NULL。

void main() {
  char * a = getenv("ANCHOR_STEM");
  if (strlen(a)>0)
    printf("%s\n", a);
}

GDB / DDD從同一終端啟動。 即使我“顯示環境”,這個環境也存在。

有人知道嗎?

操作系統/工具版本信息:RHEL Linux hostname1 2.6.32-754.3.5.el6.x86_64#1 SMP Thu Aug 9 11:56:22 EDT 2018 x86_64 GNU / Linux GNU gdb(GDB)7.12 gcc(GCC)6.3.0

包括適當的頭文件

#include <stdlib.h>
#include <string.h>
#include <stdio.h>

將警告視為錯誤。

即使我“顯示環境”,這個環境也存在。

當GDB調用您的程序時,它將啟動一個新的Shell來運行該程序。

當目標程序的環境發生更改時,大多數情況下這是外殼初始化文件( ~/.bashrc~/.kshrc等)更改環境的結果。

更改非交互式shell的環境確實是一個壞主意。 有關如何避免這種情況的文檔

如果getenv返回NULL,則是因為找不到環境變量。 但還是要小心 if (strlen(a)>0)變為非法,則此指令失敗;如果getenv(....) ,此指令失敗。 getenv發送回NULL,此指令使程序崩潰。 if (strlen(a)>0) ->不一定有用,則最好在執行此行之前測試指針有效性

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
    char * a = getenv("ANCHOR_STEM");
    if( NULL != a ){
        (void)puts(a);
        return EXIT_SUCCESS;
    }
    (void)puts("none");
    return EXIT_FAILURE;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM