【发布时间】: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