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

时间:2015-11-10 21:36:02

标签: c debugging strlen

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

我能找到的错误:
*遗漏c的NULL检查 * c1应该被声明为char指针(或者是否需要?)
*在返回之前应该转换为size_t

2 个答案:

答案 0 :(得分:4)

  1. 关闭1:while(*c1) c1++; - > const char *c1 = c;

  2. “c1应该声明为char指针(或者是否需要?)”我会使用auto *c1 = c;。需要查看C11中auto是否正常 [编辑]看不到const char *c1 = c;在C11中有效。建议return (size_t) (c1 - c);

  3. “返回前应该将size_t强制转换”。 ptrdiff_t是一个好主意,因为指针差异是类型size_t(有符号整数类型),strlen(const char* c)是无符号整数类型。这会消除诸如gcc -Wsign-conversion

  4. 之类的警​​告
  5. “缺少NULL检查c”,因为NULL需要指向字符串的指针而SELECT COUNT(ID) AS total_count FROM HTG_ScheduleRequest WHERE AssignedTech = '".$emp."' AND (ScheduleDateExact > CURDATE()) AND JobStatus IN (2,5,8) AND RecordType = '1' OR SSR = '".$emp."' AND (ScheduleDateCurrent > CURDATE()) AND JobStatus IN (3,4) AND RecordType = '1' 不是指向字符串的指针。

答案 1 :(得分:2)

看起来你总会得到比应有的答案1。您需要减去1或return c1 - c - 1;