strchr вызывает ошибку сегментации в C
У меня проблема с программой на Си. я знаю это strchr()
вызывает проблему, и она возвращается
Ошибка сегментации
Мой код выглядит следующим образом:
char *pointer;
pointer = strchr(string, character);
Я не знаю, почему я получаю сообщение об ошибке. Я могу догадаться, что моя "строка" иногда не содержит символа. Может ли это быть причиной, почему?
Как я могу остановить это, так как у меня нет контроля над входной строкой?
Полный код
int index(const char *string, char character)
{
const char *pointer;
pointer = strchr(string, character);
if(pointer)
return (pointer - string);
else
return -1;
}
3 ответа
Для написания кода сохранения всегда выполняйте проверку ввода:
Либо трудный путь (если NULL
не должен быть передан в):
ssize_t index(const char * string, const char character)
{
assert(NULL != string);
const char * pointer = strchr(string, character);
if (pointer)
{
return (pointer - string);
}
else
{
return -1;
}
}
Или плавным способом (молча лечить NULL
Также как ""
):
ssize_t index(const char * string, const char character)
{
const char * pointer = NULL;
if (string)
{
pointer = strchr(string, character);
}
if (pointer)
{
return (pointer - string);
}
else
{
return -1;
}
}
Сначала попробуйте распечатать ввод для вашего метода.
Функция strchr ищет строку для первого вхождения c. Строка с нулевым символом завершает поиск.
Вы уверены, что ваша строка законна? (имеется в виду ноль)
Я думаю, что это может привести к вашей проблеме
Функция strchr(char *string, int c) возвращает указатель на первое вхождение символа c в строке или указатель NULL, если соответствующий символ не найден.
Так как строка поиска с нулевым символом включена в поиск, вы должны быть уверены, что ваша строка заканчивается на ноль, иначе поиск выходит за границы.
Если вы хотите напечатать строку или выполнить другие операции с результатом, сначала проверьте указатель; в вашем конкретном случае:
if(pointer != NULL)
printf(...);
[...]