сравнивая возврат из функции strdup, с помощью strncmp - PullRequest
0 голосов
/ 02 марта 2019

Я новичок в C языке.Я пытаюсь сравнить два возвращаемых значения из strdup с помощью функции strncmp, но получаю следующую ошибку:

ошибка: передача аргумента 2 из 'strncmp' делает указатель из целого числа без приведения[-Wint-конверсия]

мой код:

if (0 == strncmp( strdup(str_to_dup1), strdup(str_to_dup2)))

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

С strncmp

strncmp

int strncmp (const char * lhs, const char * rhs, size_t count);

В вашем коде вы пропускаете третий аргумент strncmp, который является максимальным количеством сравниваемых символов.

Ваша программа имеет потенциальную утечку памяти, так как указатель, возвращаемый strdup(), будетпотерян после strncmp() звонка.Кроме того, вы должны знать, что strdup() может вернуть указатель null, если произошла ошибка.

Вы должны взять возвращенный указатель strdup() на переменную и убедиться, что произошла какая-то ошибка.и затем передайте эти переменные strncmp().Сделав с strdup() возвращенными указателями, освободите их, используя free().

0 голосов
/ 02 марта 2019

strncmp принимает 3 параметра, как показано ниже

int strncmp(const char *str1, const char *str2, size_t n)

в вашем коде отсутствует третий параметр, максимальное количество символов для сравнения

...