strlen() 是一个函数参数,应该是一个字符串,但为什么它也适用于字符数组?
例如
char abc[100];
cin.getline(abc,100);
len=strlen(abc);
如果它适用于字符数组并告诉元素的数量,它也可以用于 int 数组吗?
注意:我使用的是 TurboC++
最佳答案
了解什么是字符串 很重要。 C 标准将 string 定义为“由第一个空字符终止并包括第一个空字符的连续字符序列”。这是一种数据格式,而不是数据类型; C 风格的字符串可能包含在 char
的数组中.这不要与 C++ 特定类型 std::string
混淆。 , 在 <string>
中定义(注:没有.h
后缀)header.
<string.h>
header ,或者最好是 <cstring>
header ,从 C 标准库合并到 C++ 中。在该 header 中声明的函数对 C 样式字符串或指向它们的指针进行操作。
strlen
的参数类型为 char*
, 指向字符的指针。 (它实际上是 const char*
,这意味着 strlen
promise 不会修改它指向的任何内容。)
在大多数情况下,数组表达式会隐式转换为指向数组初始元素的指针。 (有关详细信息,请参阅 comp.lang.c FAQ 的第 6 节。)
char*
您传递给 strlen
的参数必须指向字符数组的初始元素,并且数组中的某处必须有一个空字符('\0'
)来标记字符串的结尾。它计算直到但不包括空终止符的字符数。
它不会(也不能)计算数组中元素的数量,只能计算字符串中字符的数量——只有当数组实际包含有效字符串时它才能计算。如果数组中的任何位置都没有空字符,或者指针为空或无效,则行为未定义。
所以当你写的时候:
char abc[100];
cin.getline(abc,100);
len=strlen(abc);
调用cin.getline
确保数组 abc
包含一个正确的以 null 结尾的字符串。 strlen(abc)
电话 strlen
, 传递给它初始字符的地址;相当于strlen(&abc[0])
.
不,strlen
不适用于 int
的数组.一方面,这将通过 int*
值,与 char*
不匹配那strlen
需要,所以它可能不会编译。即使忽略这一点,strlen
计算字符数,而不是 int
秒。 (如果你愿意,你可以编写自己的类似函数来计算 int
s,但它仍然必须有一些方法来找到你有兴趣计算的元素的结尾。它无法访问实际的数组的长度,除非您显式传递它。)
关于c++ - 为什么 strlen() 也适用于字符数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28948745/