Переменная среды C ++ - PullRequest
       0

Переменная среды C ++

0 голосов
/ 08 октября 2018

Я пытаюсь получить значение переменной окружения и использовать его в самом коде.

Я пытаюсь сделать следующее (с переменной, установленной как export UTMZONE="33T"):

char UTMZone[4] = getenv("UTMZONE");

При этом я получаю следующую ошибку:

error: array must be initialized with a brace-enclosed initializer

Я предполагаю, что проблема связана с типами микширования, но я не знаю, какой тип конвертации мне нужно сделать.

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

Если вы действительно хотите использовать массив символов и точно знаете, что вам нужны только первые три символа UTMZONE, вы можете использовать это:

char* envptr = std::getenv("UTMZONE");
if(envptr){ // check the pointer isn't null
  char UTMZone[4];

  // set null terminator
  UTMZone[4] = '\0';

  // copy 3 chars as the null terminator is already there
  std::strncpy(UTMZone, 3, envptr);
}

, вам действительно следует использовать строки вместо char []хотя, поскольку они намного безопаснее.


edit: Натан был и быстрее, и красноречивее: (

edit: откорректировано использование strncpy вместо strcpy и добавлена ​​проверка NULL

0 голосов
/ 08 октября 2018

getenv возвращает char*.Нет способа инициализировать char[N] из char*.То, что вам нужно сделать, это захватить указатель и затем скопировать строку в массив, например

char UTMZone[4];
char* ret = getenv("UTMZONE");
if (ret)
    strncpy(UTMZone, ret, 4);
else
    // abort

При этом, если вы можете использовать std::string, то это можно создать из char*.Использование

char* ret = getenv("UTMZONE");
if (ret)
    std::string UTMZone = ret;
else
    // abort

дает вам строку, заполненную переменной окружения.Если вам нужно передать его чему-то, что требует char* или const char*, тогда вы можете использовать функции-члены data() или c_str() соответственно.Это было бы похоже на

function_that_needs_char_star(UTMZone.data());
function_that_needs_const_char_star(UTMZone.c_str());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...