str_len = strlen(buff);
buff[str_len] = '\0';
Это не правильно.read()
не заканчивается нулем buff
.Таким образом, вы не можете позвонить strlen()
на это.Если бы это произошло, вам бы не пришлось этого делать вообще.
Используйте возвращаемое значение read()
и завершите null:
ret_val = read(fd,buff,BUFFSIZE);
if (ret_val != -1)
{
buff[ret_val] = '\0';
}
Тогда вы можете сделать strcmp
.
Вам также нужно позаботиться о другом крайнем случае: если read()
возвращает BUFFSIZE
, то нет места для добавления нулевого терминатора.Таким образом, вы должны либо усечь buff
(потерять последний символ), либо передать BUFFSIZE - 1
в buf.
В качестве альтернативы вы можете использовать memcmp
.Это также избавит от необходимости прерывания нуля.