c++/c使用指针编写函数strcat()函数,实现两个字符串的首尾连接.

供稿:hz-xin.com     日期:2025-01-13
怎么使用指针编写函数strcat(),实现两个字符串的首尾连接.

这个是安全加强型,通过指定字符数组长度来避免越界:

#include

char* strcat(char* dest, int size, char* souc)
{
char* p = dest;
while(*p != '\0')++p;

while((p != dest + size - 1) && *souc != '\0')
{
*p++ = *souc++;
}
return dest;
}

int main()
{
char a[13] = {"Hello, "};

strcat(a, 13, "world!");
printf("%s", a);
}

这个是安全加强型,通过指定字符数组长度来避免越界: #include char* strcat(char* dest, int size, char* souc) { char* p = dest; while(*p != '\0')++p; while((p != dest + size - 1) && *souc != '\0') { *p++ = *souc++; } return dest; } int main() { char a[13] = {"Hello, "}; strcat(a, 13, "world!"); printf("%s", a); }

#include <iostream>

using namespace std;

int main() {

char *cat(char *a,char *b);

char s1[50] = "please ",*s2 = "let me in.";

puts(cat(s1,s2));

return 0;

}

char *cat(char *a,char *b) {

    char *p = a,*q = b; 

    while(*p++);

p--;

    while(*p++ = *q++);

*p = '\0';

return a; 

}



char *p1,*p2,*point=NULL,str1[]="please",str2[50]="let me in";
这一行中 str1[]改为 str1[50].
因为你的字符串数组大小比较小。
使用指针进行拷贝,而str1里面的空间只有7字节长,使用strcat函数就会越界,就会出现奇怪的显示了。你的函数没问题,但调用前,看下str1的空间是否有 原来字长+str2的长度这么大。否则出现乱码

楼主,你如果要编写函数,首先要由个思想。
就是得到两个字符串的时候,如果要连接它们。
就要先得到它们的长度,然后动态申请个能包容它们的另外的一个指针。
然后在拷贝过去..
当然我是这么想的...
具体的代码就不用了吧~?

c++\/c使用指针编写函数strcat()函数,实现两个字符串的首尾连接._百度...
include <iostream> using namespace std;int main() { char *cat(char *a,char *b);char s1[50] = "please ",*s2 = "let me in.";puts(cat(s1,s2));return 0;} char *cat(char *a,char *b) { char *p = a,*q = b;while(*p++);p--;while(*p++ = *q++);p = ...

C++问题求解,利用指针,编写一个函数将字符串反序在主函数中调用该函数将...
char *a=str;char *b=str+strlen(str);这两句的语法错了,重复声明了两个指针的类型,str的指针顺序你给改过来了,你是想通过这个顺序改变字符串的输出顺序,但是a,b在这里是局部变量,没有改变str的顺序,甚至最后str都没有输出结果,建议把a,b改为全局变量后再继续你的思路做 ...

编写函数,利用指针实现两个一维数组的加法运算
\/\/编写函数,利用指针实现两个一维数组的加法运算 include <stdio.h> void sum(int *a,int *b);void main(){ int a[6]={3,4,5,6,7,8},b[6]={0,8,1,2,4,5};int i;sum(a,b);for(i=0;i<6;++i)printf("%3d",*(a+i));} void sum(int *a,int *b){ int i;for...

C语言用指针编写函数判断输入的字符串是是否为回文,然后再主函数中
1、打开visual C++ 6.0-文件-新建-文件-C++ Source File。2、#include <stdio.h>int ss(int i) \/*自定义函数判断是否为素数*\/{int j; if (i <= 1) \/*小于1的数不是素数*\/ return 0; if (i == 2) \/*2是素数*\/ return 1。3、 for (j = 2; j < i; j++) \/*...

...3个数按由小到大的顺序排序,并在主函数中调用此函数,使用指针...
using namespace std;void paixu(float *p1,float *p2,float *p3){ float temp;if(*p1>*p2) { temp=*p1; *p1=*p2; *p2=temp; } if(*p1>*p3) { temp=*p1; *p1=*p3; *p3=temp; } if(*p2>*p3) { temp=*p2; *p2=*p3; *p3=temp; } } int main(){ float a,b,c;...

c语言指针函数输出一个数的因数?
可以使用指针函数来输出一个数的因数。指针函数是返回指针类型的函数,在函数中可以动态分配内存,并在函数结束时将指针返回。下面是一个实现输出一个数的因数的指针函数:include <stdio.h> include <stdlib.h> int *factors(int n, int *count) { int *f = (int *)malloc(n * sizeof(int))...

用C语言指针实现5个子函数,:输入、输出、排序、插入、反序存放。_百度...
", i+1);scanf("%d", &score[i]);getchar();}}void sort(int score[], int n){char style;printf("现在进入对当前信息排序的处理\\n");printf("按升序排序请按a,按降序请按d: ");while(1){scanf("%c",&style);getchar();if (style=='a' || style=='d')...

②编写C语言函数,使用指针完成一个二十位整型数组的遍历,并将数组中的...
include <stdio.h>#include <conio.h>int main (void) { int arr[20] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20}; int *p = arr; \/* p指向数组首元素 *\/ while (p-arr != 20) { \/* 遍历数组,每元素值+1 *\/(*p)++;printf ("%d\\t",...

c语言编程用指针编写三个函数分别是输入十个数,将他们小到大排序后...
include <stdio.h>#define N 10void printit(int *a,int n){int i;for(i=0;i<n;i++)printf("%5d",*(a+i));}void sortit(int *a,int n){int i,j,m;for(i=0;i<n-1;i++)for(j=i+1;j<n;j++)if(*(a+i)>*(a+j)){m=*(a+i);*(a+i)=*(a+j);*(a+j)...

C语言,使用指针作为函数参数,写一求数组中最大值和最小指的函数
8,9,7,4,5};//定义一个十个数据的数组 intmax;//存放最大值 intmin;//存放最小值 hanshu(a,10,&max,&min);//函数传送数组,并将最大值,最小值的地址传送 printf("Themaxnumberis%d\n",max);printf("Theminnumberis%d\n",min);return0;} ...