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
。这适用于许多字符串函数。如果你这样做了,你就有麻烦了。。。