指针问题?

时间:2011-09-27 00:13:35

标签: c++

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,它将递增计数器,直到它到达下一个可以追加值的位置。

3 个答案:

答案 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”来获取较新的大小(当前+附加量),然后将这两个部分复制到新的一个人手动,然后丢弃旧数组。