Как уже отмечали другие, ваш буфер недостаточно велик, чтобы вместить текст, который вы читаете, и вы не гарантируете, что он обнуляется.
Но использование memset()
для обнуления всегобуфер перед каждым чтением не нужен;вам просто нужно убедиться, что в конце прочитанных данных есть ноль (и, конечно, увеличить размер буфера).
Если вы сделаете readbuffer
длиной не менее 9 символов, и замените:
n = read(fd[0], readbuffer, sizeof(readbuffer));
.. с ..
n = read(fd[0], readbuffer, sizeof(readbuffer) - 1);
readbuffer[n] = '\0';
.. тогда это должно быть сделано (хотя в идеале вы должны проверить, что n
равно> = 0, чтобы убедиться, что read()
удалось).Указание на единицу меньше, чем размер буфера чтения, гарантирует, что readbuffer[n]
не будет переполнен (но если read()
не удастся, он может опустошиться).
Тогда вам просто придется иметь дело с переводом строки вend.
Это также предполагает, что вся строка читается за один вызов чтения.Вероятно, в этом случае, но часто при использовании чтения необходимо объединить несколько операций чтения, пока вы не прочитаете достаточно данных.