Помещение средней строки '\ 0' для преждевременного завершения не будет работать - PullRequest
0 голосов
/ 04 февраля 2019

Я хотел создать программу, которая будет принимать команду ввода Linux, например, pwd -P, и что-то с ней делать.То, что я хочу сделать, это поместить их в строку, где пробел '' char заменяется нулевым терминатором '\ 0', так что это будет выглядеть примерно как "pwd \ 0-P".Затем с этим я мог бы получить массив [0], указывающий на начало строки, и массив [1], указывающий на часть после '\ 0', поэтому у меня было бы 2 отдельные строки -> array [0] = "pwd "и array [1] =" -P ".Это все, поэтому я могу использовать exec (array [0], array);

Моя проблема в том, что когда я это делаю, нулевой терминатор не завершает строку после "pwd", и моя строка заканчиваетсядо "pwd-P", где между ними нет пробелов.

Строка, с которой я все это делаю, это "check"

int main(int argc, char * argv[]) {
char ch;
pid_t pid;
int i=0;
int flag = 0;
int word = 0;
int count = 0;
char check[100],temp[100];
char * array[100];
printf("Your Command> ");
strcpy(check,"");

//command stuff
array[word] = check;
temp[i]='\0';

while((ch = getchar()) != '\n'){
    count = count+1;
    if(ch != '&' && ch != ' '){
        strcpy(temp,&ch);
        strcat(check,temp);
    }
    else if(ch == ' '){
        check[count] = '\0';
        word = word+1;
        array[word] = &check[count];
        }
    else if(ch == '&'){
        flag =1;
        check[count] = 0;
    }

}

//end of command stuff


if(flag!=1){
    check[count] = '\0';
}
word = word+1;
puts(check);
array[word] = &check[count];
    //fork process stuff


if((pid = fork())==0){
    printf("hello from child\n");
    printf("%s\n",array[0]);
    printf("%s\n",array[1]);
    printf("%s\n",array[2]);
    execvp(array[0], array);
}
else{
    if(flag == 0){
        wait(NULL);
        printf("hello from parent\n");
    }
    else{
        printf("hello from parent (no wait)\n");
    }
}   
return(EXIT_SUCCESS);

}

...