c++中查找字符串长度的说明

问题描述

// C++解释中求字符串长度的程序?

int main() {
    char name[] = "computer applications";
    char *cptr = name;
    while(*cptr != '\0') {
        cptr++;
    }
    cout << "length = " << cptr - name << endl;
    return 0;
}

解决方法

字符串是由零终止字符 '\0' 终止的字符序列。

例如,如果您将使用字符串文字“Hello”初始化一个字符数组,例如

char s[] = "Hello";

那么这个声明等价于

char s[] = { 'H','e','l','o','\0' };

因此字符串的长度计算为字符数,直到遇到终止零字符。当遇到它时,它意味着表达式 *cptr 包含该字符并且循环中断其迭代。这两个指针之间的差异 cptr - name 给出了字符串的长度。

根据 C++ 标准(C++14、5.7 加法运算符)

5 当两个指向同一个数组对象元素的指针 相减,结果为两者下标之差 数组元素。结果的类型是实现定义的 有符号整数类型;此类型应与定义的类型相同 作为标头中的 std::ptrdiff_t (18.2)。与任何其他 算术溢出,如果结果不适合提供的空间, 行为未定义。 换句话说,如果表达式 P 和 Q 分别指向数组的第 i 个和第 j 个元素 对象,表达式 (P)-(Q) 具有值 i − j 提供的值 适合 std::ptrdiff_t 类型的对象。 此外,如果 表达式 P 指向数组对象的一个​​元素或一个 越过数组对象的最后一个元素,表达式 Q 指向 到同一个数组对象的最后一个元素,表达式 ((Q)+1)-(P) 与 ((Q)-(P))+1 和 -((P)-((Q)+1)) 具有相同的值, 并且如果表达式 P 指向最后一个之后的值为零 数组对象的元素,即使表达式 (Q)+1 没有 指向数组对象的一个​​元素。除非两个指针都指向 同一数组对象的元素,或最后一个元素的后一个 数组对象,行为未定义。