首页 > 其他分享 >字符串 strcpy

字符串 strcpy

时间:2022-12-08 17:40:09浏览次数:40  
标签:dest char strcpy 字符串 c1 strDest


strcpy函数:顾名思义字符串复制函数:原型:extern char *strcpy(char *dest,char *src); 功能:把从src地址开始且含有NULL结束符的字符串赋值到以dest开始的地址空间,返回dest(地址中存储的为复制后的新值)。要求:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。


该图为strcpy英文介绍:

 

字符串 strcpy_c++

   当然也要区别下不同的编译器,可能处理执行有差异。


strcpy函数原型1
char * strcpy(char *a,char *b)
{ while((*(a++)=*(b++))!=0);return a;}

strcpy函数原型2
char *strcpy(char *strDest, const char *strSrc);//strDest为目标,strSrc为源
{
     assert((strDest!=NULL) && (strSrc !=NULL)); //如果两个为空则不用复制,直接中止
     char *address = strDest;       //用address指向strDest开始地址
     while( (*strDest++ = * strSrc++) != ‘\0’ ) //复制,直到源串结束;
        NULL ; //空操作
     return address ;    //返回strDest开始地址                       
     }
}//就这个算法看来是多余.

 

Char* 类型的返回值,可以实现链式表达式。

Exp:int length = strlen(strcpy(strdest,”Hello World”));

 

strlen函数的意思是测试字符串的字符长度,不含字符串结束标志的。
sizeof是个运算符,它的结果是字符串在内存中的所占字节大小,它要把\0算进去的。


strcpy只是复制字符串,但不限制复制的数量。很容易造成缓冲溢出,也就是说,不过dest有没有足够的空间来容纳src的字符串,它都会把src指向的字符串全部复制到从dest开始的内存,


int _tmain(int argc, _TCHAR* argv[])
{
    char *s = "Golden Global View";
    char c1[5];
    char c2[5];
    char c3[5];

    memset(c1,0,sizeof(c1));
    memset(c2, 0, sizeof(c1));
    memset(c3, 0, sizeof(c1));

    strcpy(c1, s);
    printf("%s", c1);
    printf("%c", c2[0]);
    printf("%c", c3[0]);

    getchar();
    return 0;
}


可见,strcpy 同 printf以结束符判断结果。 同时栈溢出,有的编译器的话,溢出导致修改邻居地址存储的数据,导致产生预料不到的问题。


  总结,使用strcpy,注重考虑结束符的问题!

标签:dest,char,strcpy,字符串,c1,strDest
From: https://blog.51cto.com/u_6958388/5922936

相关文章

  • 字符串memcpy
    memcpy函数原型函数1:void*memcpy(void*dst,constvoid*src,size_tlen){if(NULL==dst||NULL==src){returnNULL;}void*ret=dst;if(dst<=src||(char*)ds......
  • 字符串总结2
    作者:​​xyw_Eliot​​char*和int,float等的格式化转换从字符串中提取指定类型数字或子串,这种情形也是非常的常见。大部分的情形都可以用sscanf()​和 sprintf() 这两......
  • iOS开发_颜色转十六进制字符串
    /***@briefUIColor转#ffffff格式的16进制字符串**@return格式为#ff0000的16进制字符串*/-(NSString*)hex_String{constCGFloat*components=C......
  • 10、 数组和字符串的应用 编程实现以下功能:采用选择法排序对数组a中的10个元素按
    这是按照书上的最客观的一种做法,但我个人觉得实在是太那个啥了,有很多没有必要的地方,浪费时间......
  • python字符串
    python学习字符串处理方法1.大小写转换函数作用str.lower()全小写str.upper()全大写str.capitalize()第一个字符大写str.swapcase()大写转小写,小......
  • 什么是字符串常量池?
    链接:http://www.importnew.com/10756.html在理解字符串常量前,我们先熟悉一下如何创建一个字符串,在Java中有两种方法可以创建一个字符串对象:使用new......
  • 教你如何进行数仓字符串、二进制、十六进制互转
    本文分享自华为云社区《​​GaussDB(DWS)字符串、二进制、十六进制互转​​》,作者:你是猴子请来的救兵吗。概述现网中遇到很多小伙伴不清楚字符串与进制之间的转换方法,其实......
  • 教你如何进行数仓字符串、二进制、十六进制互转
    本文分享自华为云社区《GaussDB(DWS)字符串、二进制、十六进制互转》,作者:你是猴子请来的救兵吗。概述现网中遇到很多小伙伴不清楚字符串与进制之间的转换方法,其实在Gaus......
  • Powershell 包含字符串
    字符串包含的三种方法 Console.WriteLine("请输入第一个字符串");           stringstr1=Console.ReadLine();           Console.WriteLine......
  • android jni 字符串的处理
    说明:java中使用的是utf-16 c++中使用的utf-8;同时JNI提供一系列java和c++之间转换的方法,具体如下。extern"C"JNIEXPORTjstringJNICALLJava_com_yuanrenxue_cours......