C:自定义strlen()库函数

Cod*_*ody 2 c types sizeof char strlen

我创建了我的strlen()函数版本.

unsigned int my_strlen(char *p)
{
    unsigned int i = 0;

    while(*p!='\0')
    {
        i++;
        p++;
    }

    return i;
}
Run Code Online (Sandbox Code Playgroud)

每次运行时它都会给我正确的输出.但我的同事们说这段代码可能会导致字符长度大于的系统出现问题1 byte.是这样吗 ??

所以他们修改了如下代码:

unsigned int my_strlen(char *p)
{
    unsigned int i = 0;
    char *start = p;

    while(*p!='\0')
    {
        i++;
        p++;
    }

    return p - start;
}
Run Code Online (Sandbox Code Playgroud)

我一直认为在C中一个字符长1个字节.

前片段比后者更好,反之亦然?

Sou*_*osh 6

它在C中保证sizeof(char)为1,所以你是对的.

要添加一些真实性,直接引用C11,章§6.5.3.4,sizeof_Alignof运营商

sizeof被施加到操作数已键入char,unsigned charsigned char,(或合格的版本物)的结果是1 ....]

也就是说,指针算法尊重数据类型,因此无论如何,第二种方法在预期的方面没有任何意义.这两种情况下,你在操作上p,也就是char*,这样的效果是一样的.