Выведите переменные среды БЕЗ ЗНАЧЕНИЙ на C

#c

#c

Вопрос:

Как распечатать переменные среды на C, но БЕЗ ЗНАЧЕНИЙ?? Только переменные.

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

Комментарии:

1. Почему вы не можете просто удалить значения, например, с strtok помощью, используя = в качестве разделителя?

2. Обратите внимание, что вам не следует возиться с исходной средой, через которую вы проходите getenv , особенно с такими вещами, как strtok , которые изменят среду процесса . Поработайте над копией или используйте менее навязчивые методы.

Ответ №1:

Поскольку переменные среды имеют формат 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("%sn", *envp);
        else
            printf("%.*sn", len - *envp, *envp);

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

Ideone

Комментарии:

1. Нет проблем. Если мой ответ вам поможет, выберите его в качестве ответа или проголосуйте.

2. Является ptrdiff_t ли допустимый тип для строки * формата? Я бы предположил, что он ожидает int или size_t .

3. Честно говоря, я не знаю — в соответствии с этим это требовалось int .

4. Да, стандарт требует int , поэтому разницу указателей необходимо преобразовать в int . Вероятно, разумно предположить, что длина имени переменной среды будет соответствовать an int , поэтому следует использовать простое приведение.

Ответ №2:

Переменные среды имеют вид NAME=value . Итак, вы можете искать первый = знак и печатать только до него, чтобы получить только имена.

Комментарии:

1. Вы можете выполнить поиск (и печать) многими способами. Вот один из них: ideone.com/LedegN