C 通过字符串的最后一个NUL元素获取字符串的长度
我正在编写一些函数来处理字符串,而不使用C 通过字符串的最后一个NUL元素获取字符串的长度,c,string,C,String,我正在编写一些函数来处理字符串,而不使用,我通过这样做来获得字符串的长度: char *str= "Getting the length of this"; int c; for (c= 0; str[c]!='\0'; c++); 现在c是我的字符串的长度,因此它使处理字符串变得更容易,但我想知道这是否正确(它可以工作,但可能不是一种正确的方法) 。。。我不知道这是否正确 是的,没错 为了便于阅读,我更喜欢: char *str= "Getting the length of this";
,我通过这样做来获得字符串的长度:
char *str= "Getting the length of this";
int c;
for (c= 0; str[c]!='\0'; c++);
现在c
是我的字符串的长度,因此它使处理字符串变得更容易,但我想知道这是否正确(它可以工作,但可能不是一种正确的方法)
。。。我不知道这是否正确
是的,没错
为了便于阅读,我更喜欢:
char *str= "Getting the length of this";
int c = 0;
while(str[c]) c++;
但那只是品味的问题
请注意,使用int
表示字符串长度是不常见的。strlen
函数返回size\u t
因此,要模拟库函数,还应使用size\u t
如下:
size_t my_strlen(const char* s)
{
size_t c = 0;
while(s[c]) c++;
return c;
}
char *str= "Getting the length of this";
size_t c = my_strlen(str);
问题是什么?您的代码是正确的
str
最好声明为const char*
,因为对字符串文字的任何修改(即str
指向的[第一个字符])都会产生未定义的行为。除此之外,目前的代码是正确的,但C标准库中有一个函数的作用与第三行完全相同-strlen()
,在
中声明的NULL
是空指针文本,与用于终止C字符串的字符NUL
不同。您的代码是正确的。但是编译器通常知道strlen
(在
中使用thru\uu-builtin\u-strlen
)并将更有效地编译它。在某些情况下,您的代码可以由优化编译器转换为对C++的调用> STRLEN 或类似(更有效)的代码。如果s为空怎么办?@potato-根据合同,您不能使用空指针调用strlen
。这适用于许多字符串函数。如果你这样做了,你就有麻烦了。。。