проблема в том, что ваш argv не указывает на первый элемент, когда вы пытаетесь получить из него результат.
проблема возникает здесь:
* (argv ++) = токен
argv (указатель на char *) увеличивается при добавлении указателя токена в массив argv (я полагаю, вы правильно его инициализировали). Поэтому, когда вы используете вторую часть кода для получения результата, argv уже указывает на последний элемент, в вашем случае '\ 0', который не будет выводить.
И вы смешиваете «\ 0» с NULL, хотя они оба грамматически правильны, но в вашем случае лучше использовать NULL, потому что это означает указатель, а «\ 0» означает нулевое завершение в C -строка
Вы можете изменить свой код на следующее:
/* Init argv array */
char** argv;
size_t argc=0; // token count
char *token;
token = strtok(userInput, "|");
while(token != NULL){
argv[argc++] = token;
token = strtok(NULL, "|");
}
argv[argc] = NULL; // the last element of argv array is a NULL pointer
/* get result from argv */
while(*argv!= NULL)
{
if((strcmp(*argv, "|") == 0){
count = count + 1;
}
argv++;
}
printf("%d pipes", count);