我正在为我的一个编程类创建一个shell。我有一个commandLine类,用于解析键入shell的命令,并根据命令数动态分配argv和set argc。对于我的生活,我无法弄清楚为什么我在为argv动态分配指针数组后会出现分段错误。
这是该类的构造函数。如果有人知道我为什么会遇到这个错误,我将不胜感激。 感谢
CommandLine::CommandLine(istream& in){
char * userInput = new char[256];
char * pointer = &userInput[0];
char cmdStorage[128][32];
int cmdLength = 0;
int argCount = 0;
in.getline(userInput,256);
while(1)
{
if (*pointer == ' ' || *pointer == '\0')
{
if (cmdLength != 0)
argCount++;
cmdLength = 0;
if (*pointer == '\0')
break;
}
else
{
cmdStorage[argCount][cmdLength] = *pointer;
cmdLength++;
}
pointer++;
}
*argv = (char *) calloc(argCount,sizeof(char*));
for (int i = 0; i < argCount; i++)
{
argv[i] = (char *) calloc(33,sizeof(char));
memcpy(argv[i],cmdStorage[i],sizeof(cmdStorage[i]));
}
argc = argCount;
}
答案 0 :(得分:0)
错误在于:
memcpy(argv[i],cmdStorage[i],sizeof(cmdStorage[i]));
sizeof(cmdStorage[i])
>
块大小argv[i]
指向。