C++ 帮助使用c++;思维方式 Something::methodname() { (无符号字符*)ptr=(无符号字符*)m_pptr; 而((*ptr | |*(ptr+1))和(((unsigned char*)m_pptr+BUFSIZE)

C++ 帮助使用c++;思维方式 Something::methodname() { (无符号字符*)ptr=(无符号字符*)m_pptr; 而((*ptr | |*(ptr+1))和(((unsigned char*)m_pptr+BUFSIZE),c++,logic,C++,Logic,更有可能;甚至更理智: (((unsigned char*)m_pptr+BUFSIZE)>ptr)) while(ptr

更有可能;甚至更理智:

 (((unsigned char*)m_pptr+BUFSIZE)>ptr))
while(ptr<((unsigned char*)m_pptr+BUFSIZE))//直到缓冲区结束
{
if(!*ptr)//达到空字符
打破
if(!*(ptr+1))//几乎达到空字符
打破
//做事
ptr++;
}

我觉得这一点很可疑:

while (ptr < ((unsigned char*) m_pptr + BUFSIZE)) // until end of buffer
{
    if (!*ptr)      // null char reached
        break;
    if (!*(ptr+1))  // null char almost reached
        break;

    // do stuff

    ptr++;
}
假设ptr指向一个有效字符字节,后跟一个NUL终止符字节


上行的第一个子测试将计算为true,因此ptr将递增。现在ptr指向NUL终止符字节,并且*(ptr+1)指向NUL终止符字节后的字节…该字节可能是垃圾/未定义的,因此可能是非零的,此时(ptr)将再次递增(因为第二个子测试这次评估为true),所以ptr现在指向NUL终止符字节之后的字节。从那里开始,指针指向la la land,试图解释从未打算成为它正在解析的字符串一部分的数据。

如果改为使用for循环,它会看起来更干净、更简单吗

 while ((*ptr || *(ptr+1))

用于(int i=0;我认为你有一个花括号,在那里你没有说你期望代码做什么…我很确定它没有编译。很难说出这里要问什么。这个问题是模糊的,模糊的,不完整的,过于宽泛的,或者是修辞性的,不能以当前的形式得到合理的回答。投票关闭,建议使用输入机制。有人输入文本,然后输入空指针。更多文本空指针。等等,直到双空,没有更多可用的条目。while循环检查指针值是否为真(除零以外的任何数字)或指针后的值是否为真或(除零以外的任何数字)ptr不能大于缓冲区大小
while (ptr < ((unsigned char*) m_pptr + BUFSIZE)) // until end of buffer
{
    if (!*ptr)      // null char reached
        break;
    if (!*(ptr+1))  // null char almost reached
        break;

    // do stuff

    ptr++;
}
 while ((*ptr || *(ptr+1))
for ( int i =0; i<BUFSIZE && (ptr[i] || ptr[i+1]); i++);
for ( int i =0; i<(BUFSIZE-1) && (ptr[i] || ptr[i+1]); i++);
for ( int i =1; i<BUFSIZE && (ptr[i-1] || ptr[i]); i++);