Я пытался создать программу, в которой я мог бы анализировать вводимые пользователем команды и параметры в определенные массивы (эти команды и параметры выполняли бы такие команды, как "ls", "ls -l", "ls -l | wc «Однако у меня возникла проблема с разбором:
//Split the command and store each string in parameter[]
cp = (strtok(command, hash)); //Get the initial string (the command)
parameter[0] = (char*) malloc(strlen(cp)+ 1); //Allocate some space to the first element in the array
strncpy(parameter[0], cp, strlen(cp)+ 1);
for(i = 1; i < MAX_ARG; i++)
{
cp = strtok(NULL, hash); //Check for each string in the array
parameter[i] = (char*) malloc(strlen(cp)+ 1);
strncpy(parameter[i], cp, strlen(cp)+ 1); //Store the result string in an indexed off array
if(parameter[i] == NULL)
{
break;
}
if(strcmp(parameter[i], "|") == 0)
{
cp = strtok(NULL, hash);
parameter2[0] = (char*) malloc(strlen(cp)+ 1);
strncpy(parameter2[0], cp, strlen(cp)+ 1);
//Find the second set of commands and parameters
for (j = 1; j < MAX_ARG; j++)
{
cp = strtok(NULL, hash);
if (cp == NULL)
{
leave = 1;
break;
}
else
{
parameter2[j] = (char*) malloc(strlen(cp)+ 1);
strncpy(parameter2[j], cp, strlen(cp)+ 1);
}
}
}
if (leave == 1)
{
break;
}
}
Я сталкиваюсь с проблемой, когда делаю if (strlen (cp) == NULL), есть ошибка сегментации.
Я пытаюсь вырваться из большего цикла for после того, как все входы введены в массивы. Я могу успешно ввести правильные строковые элементы в массивы, но я просто не могу выйти из цикла, как только я это сделал.