2016-09-30 54 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'。 –