char *strcat (char *str1,char *str2)
{
char *p;
for(p=str1;*p!= ‘\0′;p++)
do
{
*p++=*str2++;
} while (*str2!=’\0′);
*p=’\0′;
return(str1);
}
main()
{
char string1[80]=”I have a computer.”;
char string2[]=”I learn C language.”,*pt;
pt=strcat(string1,string2);
printf(“the new string is:%s\0″,pt);
}
大家帮我下本来这个程序我的目的是想让两个字符串连接起来.我想要的结果是
I have acomputer.I learn C language.可结果却是I learn C language.
>> 本文固定链接: http://www.vcgood.com/archives/1846
for(p=str1;*p!= ‘\0′;p++)
只循环一次,,错了!!
改成这样
for(p=str1;
{
p++;
if (*p == ‘\0′)
{
break;
}
}
试了还是不行啊,而且答案是”I have a computer”而且for(p=str1;*p!= ‘\0′;p++)没有执行一次啊,因为在定义时我定义的是*str也就是说是指针的指针.在这里*p是指针所以这里并没有错,面且你的作法在我看来也只是把这条语句用另一种形式翻译出来了而已
代码中这句有点问题!
for(p=str1;*p!= ‘\0′;p++)
这句需要完成的操作是将p指向str1的尾部,这样下面的操作可以用p来追加字符!
不过因为没有“;”号,所以和下面的do{}while语句结合一起了,这样就错误了!
修改后的代码如下,VC下测试通过,兼容UNICODE和ANSI的。
另外do{}while语句在某些规范中是不推荐使用的,因为结构没有for清晰!
[code]
TCHAR tz1[ MAX_PATH ] = _T( "Hello World" );
TCHAR tz2[ MAX_PATH ] = _T( " By XStar" );
TCHAR *p1 = tz1;
TCHAR *p2 = tz2;
TCHAR *ptz;
for( p1 = tz1; *p1 != _T( '\0' ); p1++ ) {
NULL;
}
for( p2 = tz2; *p2 != _T( '\0' ); p2++ ) {
*p1++ = *p2;
}
/*
do {
*p1++ = *p2++;
} while( *p2 != _T( '\0' ) );
*/
*p2 = _T( '\0' );
MessageBox( tz1 );
[/code]