函数:
// 从命令中分离参数
// cmd 原命令
// chCmdsArray_out 输出参数列表
// nArgsNum_out 输出参数数量
void GetArguments(const char* cmd, char*** chCmdsArray_out, int* nArgsNum_out)
{
// 参数数量
int nArgsNum = 1;
for (int i = 0; i < (int)strlen(cmd); i++)
if (cmd[i] == ' ')
nArgsNum++;
int nMaxCmdSize = strlen(cmd) + 1;
char** chCmdsArray = new char* [nArgsNum];
for (int i = 0; i < nArgsNum; i++)
{
chCmdsArray[i] = new char[nMaxCmdSize];
memset(chCmdsArray[i], 0, nMaxCmdSize);
}
// 分离每个参数
for (int nIndex = 0, nMainIndex = 0, nArgNum = 0; nIndex < (int)strlen(cmd); nIndex++, nMainIndex++)
{
if (cmd[nMainIndex] == ' ')
{
nIndex = -1;
nArgNum++;
continue;
}
chCmdsArray[nArgNum][nIndex] = cmd[nMainIndex];
}
*chCmdsArray_out = chCmdsArray;
*nArgsNum_out = nArgsNum;
}
用法:
char** args;
int num;
GetArguments("print cc dd ea.", &args, &num);
效果:
