size_t strlen(const char* c)
{
auto *c1 = c;
while(*c1++);
return c1 - c;
}
我能发现的错误:
* 缺少 c
的 NULL 检查
* c1
应声明为 char
指针(或者是必需的?)
* 应类型转换为 size_t
返回之前
最佳答案
减少 1:
while(*c1++);
-->while(*c1) c1++;
“c1 应该声明为 char 指针(或者是必需的吗?)”我会使用
const char *c1 = c;
。需要检查auto *c1 = c;
在 C11 中是否可以。
[编辑] 也看不到auto
在 C11 中有效。推荐const char *c1 = c;
“返回之前应该类型转换为 size_t”。
return (size_t) (c1 - c);
是一个好主意,因为指针差异是类型ptrdiff_t
(有符号整数类型)和size_t
是无符号整数类型。这可以消除 gcc -Wsign-conversion 等警告不需要“缺少 c 的 NULL 检查”,因为
strlen(const char* c)
需要指向字符串的指针,而NULL
不是指向 a 的指针字符串。
关于c - 这个 strlen() 实现有什么问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33640062/