Почему strchr не переводит программу в условие if? - PullRequest
0 голосов
/ 03 февраля 2019

Я пытаюсь запустить следующий код, но во время выполнения код не переходит в условие if.Почему код не входит в условие if во время выполнения?Я пометил условие проблемы.

Запуск этой программы в Windows 10. Модель потока: posix gcc версии 5.1.0 (tdm64-1)

Я попытался использовать троичный оператор и оператор ifоператор с другой строкой, и strchr отлично работает в этом случае.

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void main() {

    static char str[] = "hello world";
    static char inputTime[] = "12:05:10PM";
    char *result = strchr(str, 'w');
    long int tempNum = 0;
    char *token, tempStr[10], delimit[] = ":";

    if (strchr(str, 'w'))
        printf("\nFound w");
    else
        printf("\nDid not find w");

    (strchr(inputTime, 'P')) ? printf("\nTrue") : printf("\nFalse");

    token = strtok(inputTime, delimit);

    if (strchr(inputTime, 'P')) {
        printf("Found PM\n");
        tempNum = strtol(token, NULL, 10);
        if (tempNum != 12) 
            tempNum += 12;
        sprintf(tempStr, "%lu", tempNum);
    }
    printf("\ntempStr: %s", tempStr);

}

Приведенный выше код дает мне такой вывод: C: \ Users \ XX \ Documents \ Tests \ c-программирования> a.exe


Найдено w
True
tempStr: σ @

1 Ответ

0 голосов
/ 03 февраля 2019

Функция strtok разбивает заданную входную строку на токены.Он делает это путем изменения строки для токенизации, помещая нулевой байт вместо разделителя для поиска.

Так что после вызова strtok, inputTime выглядит так:

{ '1','2','\0','0','5',':','1','0','P','M','\0' }

Нулевой байт ставится вместо первого :.Поэтому, если бы вы напечатали inputTime, вы бы получили 12, то есть вы не найдете P.

Поскольку входная строка изменена, вы должны искать P до звоните strtok.

...