c - 这个 strlen() 实现有什么问题吗?

标签 c debugging strlen

size_t strlen(const char* c)
{
  auto *c1 = c;
  while(*c1++);
  return c1 - c;
}

我能发现的错误:
* 缺少 c 的 NULL 检查
* c1应声明为 char指针(或者是必需的?)
* 应类型转换为 size_t返回之前

最佳答案

  1. 减少 1:while(*c1++); --> while(*c1) c1++;

  2. “c1 应该声明为 char 指针(或者是必需的吗?)”我会使用 const char *c1 = c;。需要检查 auto *c1 = c; 在 C11 中是否可以。
    [编辑] 也看不到 auto 在 C11 中有效。推荐const char *c1 = c;

  3. “返回之前应该类型转换为 size_t”。 return (size_t) (c1 - c); 是一个好主意,因为指针差异是类型 ptrdiff_t (有符号整数类型)和 size_t是无符号整数类型。这可以消除 gcc -Wsign-conversion 等警告

  4. 不需要“缺少 c 的 NULL 检查”,因为 strlen(const char* c) 需要指向字符串的指针,而 NULL 不是指向 a 的指针字符串。

关于c - 这个 strlen() 实现有什么问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33640062/

相关文章:

spring-boot - 英特尔lij : Code highlighted purple in debug mode

c - 如何在不使用strlen的情况下计算字符串的字符数

c - 为什么结构的数据成员内存在堆栈中从低地址到高地址分配从高到低

c - 将 uint8_t 放在 uint64_t 中

python - 查找正在运行的 python 进程的当前行号

debugging - Visual Studio附加到流程如何工作?

c - 对二维数组进行别名时 strlen 的意外优化

c - 在循环条件中使用 strlen() 是否比仅检查空字符慢?

c - 如果二进制搜索数字不在索引中,如何返回 NULL?

c - 简单 C 子/父程序中的意外终止