我想制作我自己版本的(strlen)函数..但为什么我会犯错

  • 本文关键字:函数 犯错 strlen 我自己 版本 c
  • 更新时间 :
  • 英文 :

#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((知道任何字符串都以结尾,因此通过使用这些信息,您可以执行while循环,直到str[i] == '',这意味着您计算了字符串中的所有字符。

示例

#include <stdio.h>
int ft_strlen(char *str)
{
int  i = 0;
while (str[i] != '')
i++;
return (i);
}
int main() {
printf("%d", ft_strlen("Hello world"));
}

我建议在这个网站上运行这个例子,以便自己更多地理解代码pythontutor.com