c++ - 比较两个指针时 ">="运算符的奇怪行为

标签 c++ pointers if-statement

我正在尝试使用“>=”运算符比较两个指针的数值,但不是比较它们,而是向第一个指针添加一些随机值。

void obj::Loader::calculate_size(const char* start_ptr, const char* end_ptr, atomic_long& v, atomic_long& vt, atomic_long& vn, atomic_long& f) {
    while (start_ptr >= end_ptr) {
        if (*start_ptr == 'v') {
            start_ptr++;
            if (*start_ptr == ' ') {
                v++;
                start_ptr += 27;
            }
            else if (*start_ptr == 't') {
                vt++;
                start_ptr += 18;
            }
            else if (*start_ptr == 'n') {
                vn++;
                start_ptr += 21;
            }
        }
        else if (*start_ptr == 'f') {
            start_ptr++;
            if (*start_ptr == ' ') {
                f += 3;
                start_ptr += 17;
            }
        }
        start_ptr++;
    }
}

这个函数应该计算内存映射文件的一部分(从“start_ptr”到“end_ptr”)中这些字母的所有实例。知道文件某些部分的最小长度后,我决定有时将“start_ptr”增加一个以上,但这样做我不能依赖“!=”运算符来停止循环。

问题是“>=”并不像在整数上那样有效,它只会让整个事情崩溃。有没有其他选择?

最佳答案

鉴于循环条件是start_ptr >= end_ptr,并且考虑到循环体只会递增start_ptr,如果进入循环,则 start_ptr 永远不会小于 end_ptr,因此循环是无限的。程序的行为未定义。

“开始”在结束之后是比较反常的,所以我怀疑这是逻辑上的错误。

关于c++ - 比较两个指针时 ">="运算符的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58021040/

相关文章:

c++ - 如果启用换行,如何获取第一个显示的文档行号?

c++ - C++ 中带指针的简单代码的行为

c++ - CX0030 : Error: Expression cannot be evaluated

python-3.x - 根据 Python 中的条件复制并粘贴值

if-statement - MultiWayIf 和经典守卫有什么区别?

c - switch 和 if else 语句的区别

c++ - C++ 中具有不同数据成员的模板结构

c++ - 如何在C++中添加多个字符串

将 uint32 转换为 char

c++ 和 Boost python 简单函数