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



//程序在c++中查找字符串的长度说明?

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

字符串是一个以0结束的字符''结尾的字符序列。

例如,如果你用字符串字面值"Hello"初始化一个字符数组像

char s[] = "Hello";

则此声明等价于

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

因此,字符串的长度按遇到结束的零字符之前的字符数计算。当遇到它时,表示表达式*cptr包含该字符,循环中断其迭代。这两个指针的差值cptr - name给出了字符串的长度。

根据c++标准(c++ 14, 5.7 Additive operators)

5当指向同一数组对象元素的两个指针是两者相减,结果就是二者下标之差数组元素。结果的类型是由实现定义的符号整型;此类型应与定义的类型相同如头文件(18.2)中的std::ptrdiff_t。和其他的一样算术溢出,如果结果不适合所提供的空间,行为是未定义的。换句话说,如果表达式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不是指向数组对象的一个元素。除非两个指针都指向数组对象的最后一个元素的后一个元素数组对象,行为未定义。

最新更新