странные символы в конце массива символов - PullRequest
0 голосов
/ 20 января 2012

что я хочу сделать, это прочитать символы из буферного массива

std::vector<char> SmartIO::PeekChar(){
        int newlen= 0;
        while(buffer[ptrSeek] != 0){
            ptrSeek++;
            newlen++;
        }

        std::vector<char> temp(newlen);
        memcpy(temp.data(),&buffer[ptrSeek-newlen],newlen);
        ptrSeek = 0;
        return temp;
}

, поэтому temp.data() возвращает, например, methodtest‎‎‎‎««««««««î‏, тогда как результат должен быть только methodtest! так что вызывает эти странные символы?

Ответы [ 2 ]

1 голос
/ 20 января 2012

Ваш буферный / символьный массив не заканчивается нулем.

Вы должны знать длину буфера, иначе он должен быть нулевым.

0 голосов
/ 20 января 2012

Примечание:

Вы не можете использовать shared_ptr, так как это вызовет неправильное удаление.Для этого необходимо вызвать delete [].

. Вы можете настроить это, используя пользовательское средство удаления или boost::shared_array<char>

. Кроме того, для печати из массива символов необходим нулевой терминатор.Вам также потребуется выделить для этого байт, и вы можете использовать strcpy.

Я бы использовал shared_array, только если вы хотите скопировать его несколько раз и избежать перераспределений, иначе я бы просто использовал std::vector<char> или std::string (первый, если вы хотите записываемый массив символов).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...