[英]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.