【问题标题】:Getting Segmentation Fault error while performing strcpy执行 strcpy 时出现分段错误错误
【发布时间】:2018-04-26 12:36:38
【问题描述】:

每当我尝试执行字符串复制时都会出现分段错误。 但是当我进行直接分配时,相同的代码将起作用。在 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;
}

【问题讨论】:

  • 谁能告诉我上面的 C++ 是如何把铸造放在一边的。作为@DanM。是正确的。问题只是从编写 C 而不是 C++ 开始
  • @KavehVahedipour 它有cout ;)
  • 我很痛苦。我看了看这段代码。 std::string 发生了什么?
  • 你也可以初始化char mPath[20] = {0};而不是到达memset,这很容易出错(你也这样做了)。
  • 根据经验,只要你需要reinterpret_cast 来编译代码,你就是在做坏事。

标签: c++ segmentation-fault strcpy


【解决方案1】:

在strcpy中,*vrbPtr指向AddressHolder的地址。你想指向 AddressHolder[0]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-10
    • 2018-03-17
    • 2020-02-28
    • 1970-01-01
    • 1970-01-01
    • 2020-04-20
    • 2018-12-15
    • 1970-01-01
    相关资源
    最近更新 更多