#include <stdio.h>
void strlen(char *ptr);
int main()
{
char string[] = "david";
int a = strlen(string);
printf("Number of characters is %d", a);
return 0;
}
void strlen(char *ptr)
{
int count = 0;
while (*ptr != ' ')
{
count++;
ptr++;
}
return count;
}
制作我自己版本的(strlen(函数
OP的编译器正确地抱怨void
函数的返回值。
将标准的size_t strlen(const char *s);
签名与非void
返回一起使用。
int
将处理大多数字符串的长度。size_t
处理所有字符串,是许多C库函数用于调整大小和字符串长度的类型。
// void strlen(char *ptr)
size_t strlen(const char *ptr)
{
// int count = 0;
size_t count = 0;
while (*ptr != ' ')
{
count++;
ptr++;
}
return count;
}
使用
//int a = strlen(string);
//printf("Number of characters is %d", a);
size_t a = strlen(string);
printf("Number of characters is %zun", a);
候选简化:
size_t strlen(const char *s) {
const unsigned char *us = (const unsigned char *) s;
while (*us) {
us++;
}
return (size_t)(us - (const unsigned char *) s);
}
教育学:也适用于罕见的有符号非2的补码。OP的代码可能会错误地在-0上停止。
您的strlen
函数被定义为void
,这意味着它不会返回任何内容。但是,您希望使用返回值,而您的函数试图返回一个值。
您需要将其定义为int strlen(char *ptr)
,甚至更好的是int strlen(const char *ptr)
,因为您没有修改ptr
的内容。
您需要明白,您只需要一个条件就可以使strlen((知道任何字符串都以