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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |