我创建了我的 strlen()
函数版本。
unsigned int my_strlen(char *p)
{
unsigned int i = 0;
while(*p!='\0')
{
i++;
p++;
}
return i;
}
每次运行时它都会给我正确的输出。但是我的同事说这段代码可能会在字符长度大于 1 字节
的系统上引起问题。是这样吗??
于是他们修改了代码如下:
unsigned int my_strlen(char *p)
{
unsigned int i = 0;
char *start = p;
while(*p!='\0')
{
i++;
p++;
}
return p - start;
}
我一直认为在 C 中一个字符是 1 个字节长。
前者的片段是否优于后者,反之亦然??
最佳答案
在 C 中保证 sizeof(char)
为 1,所以你是对的。
为了增加一些真实性,直接引用 C11
,章节 §6.5.3.4,sizeof
和 _Alignof
运算符
When
sizeof
is applied to an operand that has typechar
,unsigned char
, orsigned char
, (or a qualified version thereof) the result is 1. [....]
就是说,指针算法尊重数据类型,所以第二种方法无论如何在预期方面没有任何意义。在这两种情况下,您都在 p
上操作,它是 char*
,所以效果是一样的。
关于C: 自定义 strlen() 库函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39438991/