Чтобы просто ответить на ваш вопрос, на самом деле STRCMP является функция, которую вы ищете:
#include <string.h>
if(!strcmp(line, "end\n") || !strcmp(line, "end\r\n"))
break;
или аналогичные должны сделать трюк. Обратите внимание на !
перед strcmp, поскольку strcmp возвращает 0 (т. Е. False), если строки совпадают. Но я думаю, вы уже знаете, что, поскольку вы уже упомянули strcmp в своем вопросе.
О проблеме segfault: Вы уверены, что ни один из указателей, переданных в strcmp, не имеет значения NULL? Большинство стандартных библиотек C не делают никакой проверки ошибок здесь и будут работать в segfaults при попытке прочитать память на *(0)
.
Еще одна возможная проблема, которая возникает у меня в голове, заключается в том, что использование strcmp, конечно, будет работать только в том случае, если вы уже разделили свой буфер на массив одиночных строк. strtok_r
, вероятно, наиболее подходит для этой задачи (Altough quite tricky).
'strcmp' является правильной функции использовать, это должно быть что-то еще. – dasblinkenlight
Это домашнее задание? Можем ли мы увидеть ваш код? – Eric
Вы должны выяснить, почему 'strcmp' segfaults вместо того, чтобы избежать проблемы. –