| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1984 人关注过本帖, 1 人收藏
标题:一个关于将字符串连接起来的问题
只看楼主 加入收藏
Windy0Winll
Rank: 2
来 自:走了
等 级:等待验证会员
帖 子:71
专家分:90
注 册:2010-8-26
收藏
得分:0 
===============================
void strlink(char *s,char *t)
{
  int i=0;
  while(*s++ != '\0')
     ;
  for(;*(t+i) != '\0';i++)
      *(s+i)=*(t+i);
}
===============================


我觉得楼主这个问题问得非常好。
 1.首先是sou数组越界了,楼上的已经指出来了。这种隐藏的错误一定要细心,否则那纠结。。。。对于这一点我不再多说了。
 2.对于strlink这个函数中也有好几个错误。
    (1). while(*s++ != '\0')  ;您的这一循环执行完以后,指针s可是指向的是空字符后面的一个字符哦,而您下面的操作也没有退回到空字符'\0‘,所以您的这个函数实际上是没有
           作用的。只是s指向的字符串后面被部分被第二个字符串给覆盖了。2楼,御姐的代码中的-1就是让指针指向它前面那个地址。
     (2) . for(;*(t+i) != '\0';i++)    *(s+i)=*(t+i);您的这个for循环以后,第2个参数t的空字符可没有被复制到第一个参数s后面,所以那个字符串后面还有以前被遗留下来的东
           西。您应该在后面在加上*(s+i)=0;这样一句话。

从上面,把您原来strlink函数代码改成下面,就可以了。
void strlink(char *s,char *t)
{
  int i=0;
  while(*s++ != '\0')
     ;
  for(--s;*(t+i) != '\0';i++)///这里加了--s
      *(s+i)=*(t+i);
  *(s+i)=0;////再加上这一句
}

其实C库中是有一个字符拼接函数strcat的,下面我给出一种实现:
char *
strcat (char *s1, const char *s2)
{
    char *s = s1-1;

    if  (   !s1  ||  !s2   )   return s1;

    for (   ; *++s ;       )   ;

    for (   --s,--s2; *++s = *++s2 ;   )   ;
   
    return   s1;
}

[ 本帖最后由 Windy0Winll 于 2010-9-9 14:04 编辑 ]

悄悄地来。。。 然后悄悄地走。。。。。。
2010-09-09 14:03
雾雨淼淼
Rank: 2
来 自:甘肃金昌
等 级:论坛游民
帖 子:85
专家分:89
注 册:2010-8-17
收藏
得分:0 
非常感谢,明白了
2010-09-09 15:11
快速回复:一个关于将字符串连接起来的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017352 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved