2016-09-30 56 views
0

如何在C中打印環境變量,但沒有值?只有變量。在C中打印沒有值的環境變量

int main(int argc, char **argv, char **envp) 
{ 
    while(*envp!=NULL) { 
     printf("%s\n", *envp); 
     envp++; 
    } 
    system("pause"); 
    return 0; 
} 
+1

爲什麼你就不能去掉的值,例如用'strtok',使用'='作爲分隔符? –

+1

請注意,你不應該搞亂通過'getenv'獲得的* original *環境,尤其是不會像'strtok'那樣的東西,*會改變進程的環境*。在副本上工作,或使用較少干擾的方法。 – tofro

回答

1

環境變量的格式爲NAME=value。因此,您可以查找第一個=符號並僅打印它以獲取名稱。

+0

那麼應該怎麼看最終的代碼呢? – Henrix

+0

您可以通過多種方式進行搜索(和打印)。這裏有一個:http://ideone.com/LedegN – usr

2

由於環境變量的格式爲NAME=value,所以只需要顯示字符串的一部分,最多爲=字符。

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

int main(int argc, char **argv, char **envp) 
{ 
    while(*envp!=NULL) { 
     char * len = strchr(*envp, '='); 

     if (len == NULL) 
      printf("%s\n", *envp); 
     else 
      printf("%.*s\n", len - *envp, *envp); 

     envp++; 
    } 
    system("pause"); 
    return 0; 
} 

Ideone

+0

沒問題。如果我的回答可以幫助你,那麼選擇它作爲答案,或者upvote。 –

+0

'ptrdiff_t'是格式字符串中'*'的有效類型嗎?我會想象它會期待'int'或'size_t'。 – Lundin

+0

說實話,我不知道 - 根據[this](https://linux.die.net/man/3/printf),它需要'int'。 –