K&R中的函数示例返回错误的字符串长度?
发布时间:2020-12-16 10:10:21 所属栏目:百科 来源:网络整理
导读:这是来自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] = ' '; return n;} 它看起来应该返回n 1.是否将空字符视为字符串的
|
这是来自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] = ' ';
return n;
}
它看起来应该返回n 1.是否将空字符视为字符串的一部分? 例: char s[4]; s[0] = c,s[1] = a,s[2] = t,s[3] = ' '; 这不意味着字符串大小是3并且有3个可用元素吗?该函数将返回2,这是不正确的. 那么,字符串长度定义为什么呢? 解决方法
你是绝对正确的:你的例子中返回的“n”==“strlen(s)-1”;不是“strlen(s)”.
#include <stdio.h>
#include <string.h>
int
trim (char s[])
{
int initial_strlen = strlen(s);
int n;
for (n = initial_strlen-1; n >= 0; n--) {
if (s[n] != ' ' && s[n] != 't' && s[n] != 'n')
break;
}
s[n+1] = ' ';
printf ("s=%s,initial strlen=%d,current strlen=%d,n=%dn",s,initial_strlen,strlen(s),n);
return n+1;
}
int
main (int argc,char *argv[])
{
char buf[80];
strcpy(buf,"cat ");
printf ("trim #1= %dn",trim (buf));
strcpy(buf,"catttt ");
printf ("trim #2= %dn",trim (buf));
return 0;
}
样本输出: s=cat,initial strlen=6,current strlen=3,n=2 trim #1= 3 s=cat,initial strlen=9,n=2 trim #2= 3 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
