×

strcat strcpy例子

strcat strcpy例子(C语言strcat和strcpy的不同)

admin admin 发表于2023-02-14 12:53:11 浏览37 评论0

抢沙发发表评论

本文目录

C语言strcat和strcpy的不同


strcat是将前一个参数字符串的\0去掉,然后将后一个字符串接上去,而strcpy则是用第二个字符串全部内容覆盖第一个的前部分,(对于第一个字符串超出第二个长度的部分不做改动,其中覆盖的部分包括结束符\0所以即使后部不改动并不影响字符串的值)

c++,举个strcat strcpy等字符串处理函数的例子(简单就行)


#include
#include
using
namespace
std;
int
main()
{
string
s1
,
s2
;
cin》》s1
;
s2
=
s1
;
cout《《
s2
;
return
0
;
}
//如果想了解string的成员函数
可以看下这个
http://wenku.baidu.com/view/c22fafc30c22590102029d2a.html
希望能帮助你

strcpy()与strcat()求解


printf(“%s“,strcpy(strcat(str1+1,str2+2),str3+2))
这是错误的,strcat(str1,str2)是把str2接到str1后面,是直接写内存的,而你的str1是一个指针,指向了常量,这样用会把常量后面的数据给覆盖掉,产生不可预测的结果,要用strcat必须保证前面那个指针指向的地址有足够的内存,最好是动态分配
如:
char
*
str
=
calloc(strlen(str1)+strlen(str2)+1,
sizeof(char));
strcpy(str,str1);
strcat(str,str2);
别忘了最后不用的时候把str释放掉
free(str);
str
=
NULL;

C语言-strcpy与strcat的用法


strcpy()是字符串复制函数。连字符串的结束标志‘\0’一同复制。
对于strcpy(a+1,b+2);中的b+2则是数组里的“h\0”的首地址。
a+1则是数组里的“bcde”的首地址。
即此函数的意义是:把“h\0”复制到“bcde”的位置。字符串遇到‘\0’结束
即结果是:ah。
对于strcat(s,s);中的二为数组可以看成是多个一维数组组成的。所以 s代表的是“a”的首地址,s代表的是“good”的首地址。这是字符串连接函数。即把good放到了a的后面。
结果是:agood。

C语言题目关于strcpy与strcat


strcpy(a+1,b+2);把b从第三个元素‘2’开始拷贝到a的第二个位置,输出是a2,因为字符串存储的结尾都是‘\0’,‘\0’把字符‘c’覆盖了,因为’\0’不可见,所以是a2。然后strcat(a,c+1),把c从第二个元素开始连接到a上,所以结果是a2yz。

编程实现实现strlen(),strcat(),strcpy(),strcmp();


编程实实现strlen(),strcat(),strcpy(),strcmp();
很显然这是针对字符串数组的
下面我将用下面的例子实现上述四个函数的应用:
#include 《stdio.h》
#include 《string.h》
void main ()
{
int k;
char s1=“student“;
char s2==“I am a“;
char s3;
printf(“s1字符的长度%d:/n“,strlen (s1));
peintf (“将s1与s2连在一起%s“,strcat(s1,s2));//将输出 I am a student
//把s1复制到s3中
printf(“s1复制到s3中%s/n“,strcop(s3,s1));
//比较s1与s2 字符串的大小
k=strcmp(si,s2);
printf (“s1与s2 的比较结果:“);
if (k==0)
printf(“s1=s2“);
if (k》0)
printf(“s1》s2“);
if (k《0)
printf(“s1《s2“);
}

C语言编程:用自定义函数实现字符串处理函数strcat、 strcpy、strcmp、strlen和


strcat(char
*p1,char
*p2,char
*p)
{
while(*p1)
//检查指针是否到了’\0’
{
*p=*p1;
//赋值
p1++;
//指针指向下一个字符
p++;
}
while(*p2)
{
*p=*p2;
p2++;
p++;
}
*p=’\0’;
//为str3结尾加上’\0’
}
这个是strcat是3个形参的,两个形参的是这样写的
void
strcat(char
*p1,
char
*p2)
{
while(*p1)
{
p1++;
}
while(*p2)
{
*p1
=
*p2;
p1++;
p2++;
}
*p1
=
’\0’;
}
注意
p1开的数组要比p2大哦
int
strlen(char
*p1)
{
char
*s=p1;
//将指针s指向指针p,即指向str1
while(*s)
//当*s不为’\0’的时候
s++;
//指针指向下一个字符
return
(s-p1);
//当s指向字符串的’\0’的前一位,而p指向的是开头,所以s-p就是长度
}
strcpy(char
*p1,
char
*p2)
{
while(*p2)
{
*p1
=
*p2;
p1++;
p2++;
}
}
strcmp(char
*p1,
char
*p2)
{
//当*p1,*p2不为空,且*p1
==
*p2,循环执行
while(*p1
&&
*p2
&&
(*p1
==
*p2))
{
//指向下一个元素
p1++;
p2++;
}
if(*p1》
*p2)
return
1;
else
if(*p1《
*p2)
return
-1;
return
0;
}

strcpy,strcat函数的详细使用啊!


去baidu一下啊,很多的
strcpy目录
C语言标准库函数
典型实现
出现频率最高的笔试题strcpy写法题目:
解说:
C语言标准库函数
典型实现
出现频率最高的笔试题strcpy写法 题目:
解说:
展开 编辑本段C语言标准库函数
  原型声明:extern char *strcpy(char *dest,const char *src);   头文件:string.h   功能:把从src地址开始且含有NULL结束符的字符串赋值到以dest开始的地址空间   说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。   返回指向dest的指针。
编辑本段典型实现
  /**********************   * C语言标准库函数strcpy的一种典型的工业级的最简实现   * 返回值:   * 返回目标串的地址。   * 对于出现异常的情况ANSI-C99标准并未定义,故由实现者决定返回值,通常为NULL。   * 参数:   * strDestination   * 目标串   * strSource   * 源串   ***********************/   char *strcpy(char *strDestination, const char *strSource)   {   assert(strDestination && strSource);   char *strD=strDestination;   while ((*strDestination++=*strSource++)!=’\0’)   NULL;   return strD;   }
编辑本段出现频率最高的笔试题strcpy写法
题目:
  已知strcpy函数的原型是:   char * strcpy(char * strDest,const char * strSrc);   1.不调用库函数,实现strcpy函数。   2.解释为什么要返回char *。
解说:
  1.strcpy的实现代码   char * strcpy(char * strDest,const char * strSrc)   {   char * strDestCopy=strDest; //   if ((strDest==NULL)||(strSrc==NULL)) //   throw “Invalid argument(s)“; //   while ((*strDest++=*strSrc++)!=’\0’); //   return strDestCopy;   }   错误的做法:      (A)不检查指针的有效性,说明答题者不注重代码的健壮性。   (B)检查指针的有效性时使用((!strDest)||(!strSrc))或(!(strDest&&strSrc)),说明答题者对C语言中类型的隐式转换没有深刻认识。在本例中char *转换为bool即是类型隐式转换,这种功能虽然灵活,但更多的是导致出错概率增大和维护成本升高。所以C++专门增加了bool、true、false三个关键字以提供更安全的条件表达式。   (C)检查指针的有效性时使用((strDest==0)||(strSrc==0)),说明答题者不知道使用常量的好处。直接使用字面常量(如本例中的0)会减少程序的可维护性。0虽然简单,但程序中可能出现很多处对指针的检查,万一出现笔误,编译器不能发现,生成的程序内含逻辑错误,很难排除。而使用NULL代替0,如果出现拼写错误,编译器就会检查出来。      (A)return new string(“Invalid argument(s)“);,说明答题者根本不知道返回值的用途,并且他对内存泄漏也没有警惕心。从函数中返回函数体内分配的内存是十分危险的做法,他把释放内存的义务抛给不知情的调用者,绝大多数情况下,调用者不会释放内存,这导致内存泄漏。   (B)return 0;,说明答题者没有掌握异常机制。调用者有可能忘记检查返回值,调用者还可能无法检查返回值(见后面的链式表达式)。妄想让返回值肩负返回正确值和异常值的双重功能,其结果往往是两种功能都失效。应该以抛出异常来代替返回值,这样可以减轻调用者的负担、使错误不会被忽略、增强程序的可维护性。      (A)忘记保存原始的strDest值,说明答题者逻辑思维不严密。      (A)循环写成while (*strDest++=*strSrc++);,同(B)。   (B)循环写成while (*strSrc!=’\0’) *strDest++=*strSrc++;,说明答题者对边界条件的检查不力。循环体结束后,strDest字符串的末尾没有正确地加上’\0’。   2.返回strDest的原始值使函数能够支持链式表达式,增加了函数的“附加值”。同样功能的函数,如果能合理地提高的可用性,自然就更加理想。   链式表达式的形式如:   int iLength=strlen(strcpy(strA,strB));   又如:   char * strA=strcpy(new char,strB);   返回strSrc的原始值是错误的。其一,源字符串肯定是已知的,返回它没有意义。其二,不能支持形如第二例的表达式。其三,为了保护源字符串,形参用const限定strSrc所指的内容,把const char *作为char *返回,类型不符,编译报错。   在上面的语句中,循环语句while ((*strDest++=*strSrc++)!=’\0’);较难理解,可以把这句理解为以下操作。   第一种:   while(1)   {   char temp;   temp=*strDest=*strSrc;   strDest++;   strSrc++;   if(’\0’==temp)   break;   }   第二种:   while(*strSrc!=’\0’)   {   *strDest=*strSrc;   strDest++;   strSrc++;   }   *strDest=*strSrc;   个人意见:throw用法明显的运行不通,如果要判断加#include《assert.h》   如果表达式的值为假,整个程序将退出,并输出一条错误信息。如果表达式的值为真则继续执行后面的语句。   使用这个宏前需要包含头文件assert.h   #include 《assert.h》   #include《iostream.h》    char * strcpy(char * strDest ,const char *strSrc)   {   assert((strDest!=NULL) && (strSrc !=NULL));   char * strDestCopy=strDest;   while ((*strDest++=*strSrc++)!=’\0’);   return strDestCopy;   }   void main()   {   char a, c=“i am teacher!“;   strcpy(a,c);   cout《《a《《endl;   }