加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读