作者:e絕纞乄 | 来源:互联网 | 2023-05-18 18:34
strlen()是一个函数参数应该是一个字符串,但为什么它也适用于字符数组?
例如
char abc[100];
cin.getline(abc,100);
len=strlen(abc);
如果它适用于字符数组并告诉元素的数量,它也可以用于int数组吗?
注意:我使用的是TurboC++
1> Keith Thomps..:
了解字符串是什么很重要.C标准将字符串定义为"由第一个空字符终止并包括第一个空字符的连续字符序列".它是一种数据格式,而不是数据类型 ; 一个C风格的字符串可能包含在一个数组中char
.不要将其与(注意:无后缀)标头中std::string
定义的特定于C++的类型混淆.
.h
的
报头,或优选地,所述
报头中,从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);
调用以cin.getline
确保数组abc
包含正确的以null结尾的字符串.strlen(abc)
调用strlen
,传递初始字符的地址; 它相当于strlen(&abc[0])
.
不,strlen
不会在数组上工作int
.一方面,这将传递一个int*
值,这不符合char*
该strlen
要求,因此它可能不会编译.即使忽略这一点,strlen
也要算字符,而不是int
s.(int
如果你愿意,你可以编写自己类似的函数来计算s,但它仍然必须有一些方法来找到你有兴趣计算的元素的结尾.它无法访问实际的长度.数组除非你明确地传递它.)
@eatq:换句话说,我在这里度过的时间越多,我写短评就越糟糕.8-)}