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个字节.
前片段比后者更好,反之亦然?
它在C中保证sizeof(char)为1,所以你是对的.
要添加一些真实性,直接引用C11,章§6.5.3.4,在sizeof和_Alignof运营商
当
sizeof被施加到操作数已键入char,unsigned char或signed char,(或合格的版本物)的结果是1 ....]
也就是说,指针算法尊重数据类型,因此无论如何,第二种方法在预期的方面没有任何意义.这两种情况下,你在操作上p,也就是char*,这样的效果是一样的.