Вместо:
stream << charArray << endl;
используйте:
stream.write(charArray, sizeof(charArray));
stream.write("\n", 1); // this is the newline part of std::endl
stream.flush(); // this is the flush part of std::endl
Первый предполагает, что вы отправляете строку с нулевым символом в конце (потому что выпрохождение char*
- см. конец ответа почему).Поэтому, когда код встречает самый первый char
со значением 0
, равным '\0'
(нулевой терминатор), он останавливается.
С другой стороны, во втором подходе используется неотформатированныйвыходная запись, которая не будет заботиться о значениях внутри charArray
- она возьмет его (как указатель на свой первый элемент) и запишет sizeof(charArray)
байт , начиная с этого указателя, до stream
.Это безопасно, поскольку гарантируется, что sizeof(char) == 1
, таким образом, sizeof(charArray)
даст 256
.
. Вам нужно учесть, что затухание массива .В этом случае он будет работать (вещь sizeof
), но не будет работать, если вы просто передадите затухший указатель на первый элемент массива.Подробнее здесь: что распадается массив?