字符数组末尾的奇怪字符

weird chars at the end of char array

本文关键字:字符 数组      更新时间:2023-10-16

我想做的是从缓冲数组中读取字符

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!那么是什么导致了这种奇怪的字符呢?

您的缓冲区/字符数组不是以空值结尾的。

您必须知道缓冲区的长度,否则它必须以 null 结尾。

注意:

您不能使用这样的shared_ptr,因为它会调用错误的删除。它需要调用 delete[]。

您可以使用自定义删除程序或boost::shared_array<char>

进行调整

除此之外,要从字符数组打印,它需要一个空终止符。您也需要为此分配一个字节,并且可以使用strcpy。

我只会在你想复制它几次并避免重新分配的情况下使用 shared_array,否则我只会使用 std::vector<char>std::string(如果你想要一个可写的字符数组,前者(。