2011-09-27 99 views
0

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); 

鉴于以上我怎么追加数组的问题。创建一个数组/追加到它。

的TXT条目有一个空终止后:因为它是一个嵌入式系统

为了进一步解释循环不能使用std::vector。在所有条目的末尾都有一个双null。因此,在while循环中,如果指针指向的值为false(0或00)或ptr || ptr+1,它将递增计数器直到它到达可以追加值的下一个点。

+4

'(ptr = Txt)'看起来不对。它应该是'=='吗? –

+0

是的,谢谢你的接力 – WutWut

回答

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你可以做同样的事情:分配一个更大的缓冲区,在所有内容复制并删除旧的缓冲区。

+0

因为我不知道我的价值是什么类型。另外为了进一步解释循环,在txt条目之后有一个空终止。在所有条目的末尾都有一个双null。因此,在while循环中,如果指针所指向的值为0或00,它将递增计数器,直到它到达可以追加值的下一个点 – WutWut

+0

@WutWut你是什么意思,你不知道什么键入它会是什么?您正在转换为'unsigned char',所以您知道该类型。如果不知道类型,你无法投射。 –

+0

我不确定我会接收数据的原因是什么。我的问题之一是更多的语法 – WutWut

2

我想你在那之前就吹了它。

if(ptr = Txt)将txt分配给ptr,然后测试值是否为null。

因此,前面的语句分配ptr= buffer;没有效果。

而且你永远不会过去的第一return只要TXT具有价值在未来。

+0

+1好抓! – 2011-09-27 00:18:38

+0

你那么对!感谢您的发现。我改变了这种说法,如果(ptr == pvTxt) – WutWut

+0

@ 0A0D - 对不起,但如果你知道任何有关TTY的信息,你应该知道它应该是0D0A。 ;) –

0

另外要小心你的扫描或您的响应不走开的buffer结束。

我觉得你打错了你主要例子中的变量名,但是如果你需要调整g_pvTxt的大小,你需要使用“new”来获得新的尺寸(当前+附加量)之一,然后将这两个部分复制到手动新建一个,然后丢弃旧的数组。