【问题标题】:Creating an strlen function in c在c中创建一个strlen函数
【发布时间】:2022-01-04 01:15:35
【问题描述】:

任务是创建一个替换 strlen 的函数,但按照我将介绍的顺序,您必须填补空白。我尝试了一些东西,但在需要计算尺寸并将其退回的地方卡住了。

#include <stdio.h>
#define MAXLENGTH 80

int my_strlen(char* s)
{
    char *p = (1);
    while (2)
        (3);

    return (4);
}


int main()
{

    char str[MAXLENGTH];
    int len;
    printf("Enter a string:");
    gets(str);
    len = my_strlen(str);
    printf("The length of the string %s is %d\n", str, len);
}

我试过这个但是卡在3,如何计算大小

#include <stdio.h>
#define MAXLENGTH 80

int my_strlen(char* s)
{
    char *p = s;
    while (*p++ != '\0')
        (3);

    return (4);
}


int main()
{

    char str[MAXLENGTH];
    int len;
    printf("Enter a string:");
    gets(str);
    len = my_strlen(str);
    printf("The length of the string %s is %d\n", str, len);
}

【问题讨论】:

  • 您遇到了什么问题?到目前为止,您尝试过什么?
  • 那么您的实际问题是什么?是什么特别阻碍了您完成甚至开始任务?
  • 要回答你的问题,char *p = s; while (*p != '\0') p++; return p - s;。
  • 如果它应该替换strlen,它应该返回size_t。

标签: c string pointers char strlen


【解决方案1】:
size_t mystrlen(const char *restrict s)
{
    const char *restrict e = s;
    while(*e) e++;

    return (uintptr_t)e - (uintptr_t)s;
}

但我不建议你给老师看.....

【讨论】:

    【解决方案2】:

    我刚刚将您的 (3) 和 (4) 替换为 i++,这将增加直到终止 (\0) 并将返回 (i)。

    #include <stdio.h>
    #define MAXLENGTH 80
    
    int my_strlen(char* s)
    {
        int i=1;
        char *p = s;
        while (*p++)
            i++;
    
        return (i);
    }
    
    
    int main()
    {
    
        char str[MAXLENGTH];
        int len;
        printf("Enter a string:");
        gets(str);
        len = my_strlen(str);
        printf("The length of the string %s is %d\n", str, len);
    }
    

    返回值为+1(包括\0)

    【讨论】:

    • 不要使用gets,它不再是标准的一部分,而size_t是计算字符时更好的选择。
    • 为什么要返回长度加一?这完全没有任何意义。 strlen 手册明确声明没有终止\0。
    猜你喜欢
    • 2015-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-20
    相关资源
    最近更新 更多