用指针实现字符串的连接

2024-11-08 00:05:39
有2个网友回答
网友(1):

#include<stdio.h>

int main(){

char a[20]={0},b[20]={0};

char*q=a,*p=b;

printf("请输入第一串数字\n");

gets(a);

printf("请输入第二串数字\n");

gets(b);

printf("第一串数字为\n");

puts(a);

printf("第二串数字为\n");

puts(b);

while(*q!='\0'){

q++;

}

while(*p!='\0'){

*q=*p;

q++,p++;

}

printf("连接后的字符为:\n");

puts(a);

return 0;

}

扩展资料:

gets()用法:

示例

C:

#include<stdio.h>//这个头文件包含gets()函数,这个函数在ISO/IEC 9899 2011(C11)标准中被移除

int main(void)

{

char str1[5];//不要char*p,然后gets(p),这是错误的,因为p没有指向有效的内存,它可能指向任何非法地址//地方的未知大小的内存块,这样以来,就可能修改了不属于本程序的内存的内容

gets(str1);

printf("%s\n",str1);

return 0;

}

#include<stdio.h>//gets_s()用法

#define CH 20

int main(void)

{

char ch[CH];

printf("请输入你的名字:\n");

gets_s(ch,CH);//这里不能用gets_s(ch);

printf("这是你的名字:%s\n",ch);

return 0;

}

C++:

#include<iostream>

#include<cstdio>

using namespace std;

int main()

{

char str[100];

gets(str);

cout<<str<<endl;

return 0;

}

gets()函数用来从标准输入设备(键盘)读取字符串直到换行符结束,但换行符会被丢弃,然后在末尾添加'\0'字符。其调用格式为:

gets(s);

其中s为字符串变量(字符串数组名或字符串指针)。

gets(s)函数与scanf("%s",s)相似,但不完全相同,使用scanf("%s",s)函数输入字符串时存在一个问题,就是如果输入了空格会认为字符串结束,空格后的字符将作为下一个输入项处理,但gets()函数将接收输入的整个字符串直到遇到换行为止。

也就是说:gets()函数读取到\n(我们输入的回车)于是停止读取,但是它不会把\n包含到字符串里面去。然而,和它配合使用的puts函数,却在输出字符串的时候自动换行。

说明编辑

gets(s)函数中的变量s为一字符串指针。如果为单个字符指针,编译连接不会有错误,但运行后内存溢出错误。

宽字符版本,当使用unicode宽字符文本时,使用这个函数_getws();

在C11标准中被删除,可用C标准库中的fgets代替.

网友(2):

连接的逻辑错误,正确的处理过程应该如下:

首先将第一个字符串指针移动到末尾,然后才可以开始将str2的字符依次连接到 str1 后面

#include 
void link(char *,char *);
int main()
{
 char str1[81],str2[81];
 gets(str1);
 gets(str2);
 link(str1,str2);
 puts(str1);
 return 0;
}
void link(char *str1,char *str2)
{
 while(*str1!=0)
 str1++;//将str1指向末尾的 \0 ,该位置正好是str2第一个字符要放置的位置

 while(*str2!=0)
 {
  *str1=*str2;    //str2还没到末尾时依次连接每个字符
  str1++;        //移动两个指针准备处理下个字符
  str2++;
 }

 *str1=0;    //为str1手工置结束符 \0
}