===============================
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 编辑 ]
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 编辑 ]
悄悄地来。。。 然后悄悄地走。。。。。。