Я выполняю компонентный тест для кода «C». Я прочитал функциональность функции strtok_r, но я не могу получить возвращаемое значение, которое я хочу передать в strncmp 'function. Мой код содержит strtok_r и strncmp функции, как показано ниже:Как функция strtok_r возвращает значения?
typedef struct BufferN {
uint32_t v;
uint32_t m;
} My_Buffer;
char subsystemstr[64] = { '\0' };
My_Buffer buffer;
char *p_system;
char *p_subsystem;
(void) GetString(&buffer, subsystemstr, sizeof(subsystemstr));
p_system = strtok_r (subsystemstr, ":", &p_subsystem);
for (i = 0u; i < 100; i++)
{
if (strncmp(p_system, "all", 64) == 0)
{
/*Some Code Statement*/
}
}
Поскольку массив subsystemstr инициализируется «\ 0», я изменение этого значения массива с помощью функции GetString как ниже:
strncpy(subsystemstr, "all:", 64);
Когда я печать subsystemstr, я обновив массив как:
["all:", '\0' <repeats 59 times>]
, но когда я печать p_system (возвращаемое значение strtok_r). Я получаю
[0x388870 ""]
Я смущен, как это работает. На самом деле, я хочу значение p_system = «все», так что функция «strncmp» может return 0. Прошу предложить.
Добавить 'Е ("subsystemstr =% s \ п", subsystemstr) ; 'после' GetString' и перед вызовом 'strtok' и' printf ("p_system =% s \ n", p_system); 'после' strtok'. Что он выводит? – dbush
Он дает тот же результат мне ["all:", '\ 0' <повторяет 59 раз>] и [0x388870 ""] – AshA
@AshA: 'printf (" p_system =% s \ n ", p_system)' не будет печатать '[0x3888770" "]' :) Однако было бы полезно иметь 'printf (" subsystemstr =% p; p_system =% p \ n ", subsystemstr, p_system);' чтобы понять, что p_system указывает на. Наконец, 'strncmp' не нужно здесь (если вы не подозреваете, что можете перегрузить подсистему перераспределения str, и вам следует избегать этого :) :) и ни strncmp', ни' strcmp' не вернут 0 при сравнении «all:» с "все". (если вы не сравните 3 символа с помощью 'strncmp (..., 3);') – rici