#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;
}
Комментарии:
1. Нет проблем. Если мой ответ вам поможет, выберите его в качестве ответа или проголосуйте.
2. Является
ptrdiff_t
ли допустимый тип для строки*
формата? Я бы предположил, что он ожидаетint
илиsize_t
.3. Честно говоря, я не знаю — в соответствии с этим это требовалось
int
.4. Да, стандарт требует
int
, поэтому разницу указателей необходимо преобразовать вint
. Вероятно, разумно предположить, что длина имени переменной среды будет соответствовать anint
, поэтому следует использовать простое приведение.
Ответ №2:
Переменные среды имеют вид NAME=value
. Итак, вы можете искать первый =
знак и печатать только до него, чтобы получить только имена.
Комментарии:
1. Вы можете выполнить поиск (и печать) многими способами. Вот один из них: ideone.com/LedegN