【发布时间】:2015-09-14 08:19:07
【问题描述】:
我有以下带有测试驱动程序的 strncmp 函数实现,但是无法编译。
我也不确定逻辑是否正确。这是来自我的编译器的错误消息:
警告:控制可能到达非空函数的末尾 [-Wreturn-type]
#include <stdio.h>
#include <string.h>
#undef strncmp
int strncmp(const char *s, const char *t, size_t num)
{
for ( ; num >0; s++, t++, num--)
if (*s == 0)
return 0;
if (*s == *t) {
++s;
++t;
}
else if (*s != *t)
return *s - *t;
}
int main ()
{
char str[][5] = { "R2D2" , "C3PO" , "R2A6" };
int n;
puts ("Looking for R2 astromech droids...");
for (n=0 ; n<3 ; n++)
if (strncmp (str[n],"R2xx",2) == 0)
{
printf ("found %s\n",str[n]);
}
return 0;
}
【问题讨论】:
-
您的实现中至少存在三到四个错误。你为什么不去code review 让人们逐行拆开你的代码?
-
不,@NikolaiRuhe,CodeReview 仅适用于工作代码。 SO 用于损坏的代码。
-
@ARedHerring 不确定 CodeReview 但 SO 似乎也不太合适(请参阅有关“为什么此代码不起作用?”的帮助部分)。
-
仅仅因为它在 SO 上是题外话,不是就意味着它在 CR 上是题外话。如果这里离题,请投票关闭,但请在建议迁移之前阅读我们的帮助部分,否则用户只会在两个方面感到失望,这对任何人都没有帮助。
-
拜托拜托拜托:总是在
if/else/for/while的主体周围加上大括号({ })。这是粗心编码造成错误的主要原因之一。