这段代码来自 K&R 的第 65 页。描述说这个函数返回字符串的长度。代码如下:
int trim (char s[])
{
int n;
for (n = strlen(s)-1; n >= 0; n--)
if (s[n] != ' ' && s[n] != '\t' && s[n] != '\n')
break;
s[n+1] = '\0';
return n;
}
看起来它应该返回n+1。空字符不被视为字符串的一部分吗?
示例:
char s[4];
s[0] = c, s[1] = a, s[2] = t, s[3] = '\0';
这是否意味着字符串大小为3,有3个可用元素?该函数将返回2,这是不正确的。另外,那么字符串长度定义是什么?
trim()
的目的和返回值存在一些误解。该函数旨在修剪通过引用传递的变量,并在未修剪任何内容时返回负值,在字符串为空时返回0,在修剪字符串时返回正值。如果函数trim()
旨在返回字符串的长度,那么它不就应该是return strlen(s)
吗? - alvits