[英]I want to make my own version of (strlen) function...but why i am getting error
#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 != '\0')
{
count++;
ptr++;
}
return count;
}
制作我自己的 (strlen) function 版本
OP 的編譯器正確地抱怨返回值為void
function。
使用標准的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 != '\0')
{
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 %zu\n", 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);
}
Pedantic:也適用於罕見的有符號非 2 補碼。 OP 的代碼可能會錯誤地停在 -0 上。
您的strlen
function 被定義為void
,這意味着它不會返回任何內容。 但是,您期望使用返回值,並且您的 function 嘗試返回一個值。
您需要將其定義為int strlen(char *ptr)
,甚至更好的是int strlen(const char *ptr)
因為您沒有修改ptr
的內容。
您需要了解,您只需要一個條件來使您的 strlen() 知道任何字符串都以\0
結尾,因此通過使用此信息,您可以通過 while 循環 go 直到您str[i] == '\0'
這意味着您計算了字符串中的所有字符。
例子
#include <stdio.h>
int ft_strlen(char *str)
{
int i = 0;
while (str[i] != '\0')
i++;
return (i);
}
int main() {
printf("%d", ft_strlen("Hello world"));
}
我建議在這個網站上運行這個例子來自己理解代碼pythontutor.com
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.