Ошибка ошибки сегментации при выполнении команды strcpy - PullRequest
0 голосов
/ 26 апреля 2018

Получение ошибки сегментации, когда я пытаюсь выполнить копирование строки. но тот же код будет работать, когда я буду делать прямое назначение. В операторе if я выполняю операцию strcpy, получая проблему с повреждением памяти. Помогите мне понять функциональность "strcpy" с соответствующим кодом.

 int getEnvVariable()
{
   char mPath[20];
   char mHome[20];
   char *AddressHolder[2];
   char *VariableName[2];

   VariableName[0]="PATH";
   VariableName[1]="HOME";

   memset(&mPath,sizeof(mPath),0);
   memset(&mHome,sizeof(mHome),0);

   AddressHolder[0]=reinterpret_cast<char*>(&mPath);
   AddressHolder[1]=reinterpret_cast<char*>(&mHome);

  char** namePtr = VariableName;
  char** vrbPtr = AddressHolder;
  char* tmp;
  while(*namePtr != NULL)
  {
    tmp = getenv(*namePtr);
    cout<<"\n tmp - "<<tmp<<"\n";
    if(tmp)
    {
      strcpy(*vrbPtr,tmp);
      //*vrbPtr=tmp;
      cout<<"\n"<<*namePtr<<": "<<*vrbPtr;
      ++namePtr;
      ++vrbPtr;
    }
    else
    {
       cout<<"\n Error: Environment veribale name are not set\n";
       return -1;
    }

  }

   cout<<"\n"<<VariableName[0]<<" : "<<mPath;
   cout<<"\n"<<VariableName[1]<<" : "<<mHome;

   return 0;
}

1 Ответ

0 голосов
/ 26 апреля 2018

В strcpy, * vrbPtr указывает на адрес AddressHolder. Вы хотите указать на AddressHolder [0]

...