C语言编写一个程序输入两个字符串1和字符串2(两个字符串长度不超过20),把字符串2连接到字符串1后面,并输出

2024-12-02 14:29:02
推荐回答(4个)
回答1:

 说白了就是strcat

char *strcat(char *strDest, const char *strSrc) //将源字符串加const,表明其为输入参数

  {

  char *address = strDest; //该语句若放在assert之后,编译出错

  assert((strDest != NULL) && (strSrc != NULL)); //对源地址和目的地址加非0断言

  while(*strDest) //是while(*strDest!=’\0’)的简化形式

  { //若使用while(*strDest++),则会出错,因为循环结束后strDest还会执行一次++,那么strDest

  strDest++; //将指向'\0'的下一个位置。/所以要在循环体内++;因为要是*strDest最后指

  } //向该字符串的结束标志’\0’。

  while(*strDest++ = *strSrc++)

  {  
*p++等价于*(p++)。至于为什么会等价呢?根据c语言的优先级。*与++的优先级同处在第二级别上。他们的优先级是一样的,又因为处在第二级别的优先级运算符是结合方向是从右到左,所以当出现*p++这样的表达式的时候,根据优先级别相同,并且结合方向是从右到左,所以就等价于*(p++)了。那么也就是,先将p指针移动到下个p指针所指向元素的地址的下一个地址,然后再对那个地址取值。(*p)++是取p所指向地址的值,然后再将这个值+1
  NULL; //该循环条件内可以用++,

  } //此处可以加语句*strDest=’\0’;无必要

回答2:

#include
#include
void main()
{
char a[20],b[20]; //创建两个字符串数组,大小可以自定,但要大于20
int n=0,m=0,i,j;
do
{
scanf("%c",&a[n]);
n++;
}
while(a[n-1]!='\n'); //输入第一个数组
n=n-1; //将n重新赋值,为第一个数组的最后一个元素(\0)标志
do
{
scanf("%c",&b[m]);
m++;
}
while(b[m-1]!='\n'); //输入第二个数组
b[m-1]='\0'; //第二个数组的结束标志
for(i=n,j=0;j<=m-1;i++,j++)
{
a[i]=b[j];
} //将第二个字符数组的内容连接到第一个字符数组的末尾
printf("%s\n",a);
system("pause");
}

已测,无误。

回答3:

/*
I love my friends!
Press any key to continue
*/
#include
char *StrCat(char strDest[], char strSrc[]) {
int i = 0,j = 0;
while(strDest[i]) ++i;
while(strDest[i++] = strSrc[j++]);
return strDest;
}

int main() {
char s[30] = "I love my ";
char t[] = "friends!";
printf("%s\n",StrCat(s,t));
return 0;
}

回答4:

#include
int main()
{char s1[40],s2[20];
int i,j;
gets(s1);
gets(s2);
for(i=0;s1[i];i++);
for(j=0;s2[j];j++)
s1[i++]=s2[j];
s1[i]='\0';
puts(s1);
return 0;

}