Изменение:
memblock[nBytes+1]='\0';
до:
memblock[nBytes]='\0';
Допустим, вы прочитали шесть байтов до memblock
, которое переходит в позиции от 0
до 5
включительно:
0 1 2 3 4 5 6 7
+---+---+---+---+---+----+---+---+
| H | E | L | L | O | \n | ? | ? |
+---+---+---+---+---+----+---+---+
(области ?
все еще содержат мусор, который был там раньше).
Затем вам нужно поместить нулевой терминатор в позицию 6, а не в позицию 7, как это делает ваш код.
Поместив нулевой терминатор слишком далеко вправо, вы включаете первую ?
позицию, которая может содержать что угодно.
Вот что является причиной вашей конкретной проблемы. У вас также есть проблема, связанная с тем, что вы не выделяете место для хранения данных, которые вы читаете. У вас просто есть char *
, но вы на самом деле не инициализируете его, чтобы указать на полезную память. Это почти наверняка вызовет проблемы.
Вероятно, самое простое решение - определить его как:
char memblock[nBytes+1];
Хотя я вижу, что вы исправили это в своем вопросе сейчас, так что это не имеет большого значения. фактическая проблема (установка нулевого байта в неправильном месте) описана выше.