buffer
是我班级受保护的void*
部分。
void* ptr;
ptr= buffer;
if(ptr == pvTxt)
return ptr;
while (*((unsigned char*)ptr) || *(((unsigned char*)ptr)+1))
((unsigned char*)ptr)++;
return *((unsigned char*)ptr)+1;
一直到:
((unsigned char*)ptr)++;
return *((unsigned char*)ptr)+1;
很好,但我知道演员有问题吗?
我的主要内容也是:
g_pvTxt = new unsigned char[BUFSIZE];
memset (g_pvTxt,0,BUFSIZE);
鉴于上述问题,我如何追加数组。创建一个数组/追加它。无法使用std::vector
,因为它是嵌入式系统
进一步解释循环:
在txt条目之后有一个空终止。在所有条目的末尾都有一个双空值。因此,在while循环中,如果指针指向的值为false(0或00)或ptr || ptr+1
,它将递增计数器,直到它到达下一个可以追加值的位置。
答案 0 :(得分:2)
我认为你在此之前就已经吹了它。
if(ptr = Txt)
将Txt分配给ptr,然后测试该值是否为null。
因此,前一个分配ptr= buffer;
的语句无效。
只要Txt有值,你就永远不会超过第一个return
。
答案 1 :(得分:2)
为什么不只是将演员阵容发送到unsigned char*
?
unsigned char* ptr= static_cast<unsigned char*>(buffer);
if(ptr == pvTxt)
return ptr;
while (ptr[0] || ptr[1]) // *(ptr+1) would work as well
ptr++;
return *ptr+1;
如果要附加到缓冲区,并且不能使用std::vector
,则可以执行类似的操作:分配更大的缓冲区,复制所有内容并删除旧缓冲区。
答案 2 :(得分:0)
另外请小心扫描,否则您的回复不会超出buffer
的结尾。
我认为您错误输入了主要示例中的变量名称,但是如果您需要调整g_pvTxt的大小,则需要使用“new”来获取较新的大小(当前+附加量),然后将这两个部分复制到新的一个人手动,然后丢弃旧数组。