eat*_*atq 3 c++ arrays function
strlen()是一个函数参数应该是一个字符串,但为什么它也适用于字符数组?
例如
char abc[100];
cin.getline(abc,100);
len=strlen(abc);
Run Code Online (Sandbox Code Playgroud)
如果它适用于字符数组并告诉元素的数量,它也可以用于int数组吗?
注意:我使用的是TurboC++
了解字符串是什么很重要.C标准将字符串定义为"由第一个空字符终止并包括第一个空字符的连续字符序列".它是一种数据格式,而不是数据类型 ; 一个C风格的字符串可能包含在一个数组中char.不要将其与(注意:无后缀)标头中std::string定义的特定于C++的类型混淆.<string>.h
的<string.h>报头,或优选地,所述<cstring>报头中,从C标准库并入C++.在该标头中声明的函数在C风格的字符串或指向它们的指针上运行.
参数strlen是类型char*,指向字符的指针.(实际上const char*,这意味着strlen承诺不会修改它指向的任何内容.)
在大多数情况下,数组表达式被隐式转换为指向数组初始元素的指针.(有关详细信息,请参阅comp.lang.c常见问题解答第6节.)
char*传递给的参数strlen 必须指向字符数组的初始元素,并且数组中的'\0'某处必须有一个空字符()来标记字符串的结尾.它计算最多但不包括空终止符的字符数.
它不会(也不能)计算数组中元素的数量,只计算字符串中的字符数 - 只有当数组实际包含有效字符串时才能这样做.如果数组中的任何位置都没有空字符,或者指针为空或无效,则行为未定义.
所以当你写:
char abc[100];
cin.getline(abc,100);
len=strlen(abc);
Run Code Online (Sandbox Code Playgroud)
调用以cin.getline确保数组abc包含正确的以null结尾的字符串.strlen(abc)调用strlen,传递初始字符的地址; 它相当于strlen(&abc[0]).
不,strlen不会在数组上工作int.一方面,这将传递一个int*值,这不符合char*该strlen要求,因此它可能不会编译.即使忽略这一点,strlen也要算字符,而不是ints.(int如果你愿意,你可以编写自己类似的函数来计算s,但它仍然必须有一些方法来找到你有兴趣计算的元素的结尾.它无法访问实际的长度.数组除非你明确地传递它.)