strcpy函数用法以及底层实现

strcpy(s1, s2);   strcpy函数的意思是:把字符串s2中的内容copy到s1中,连字符串结束标志也一起copy.

这样s1在内存中的存放为:ch\0;

在cout<<s1<<endl时,结果为ch;事实上,在内存里面是这样的存储结构:ch\0na

如果说s1的长度是6,那是错误的. 你没有弄清strlen与sizeof的意思。

strlen函数的意思是测试字符串的字符长度,不含字符串结束标志的。

sizeof是个运算符,它的结果是字符串在内存中的所占字节大小,它要把\0算进去的。

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开始地址
     }
}//就这个算法看来是多余.
#include <iostream>
#include <cstring>
using namespace std;

int main(int argc, char *argv[])
{
    char s1[6]="china" ,s2[3]="ch";
    cout << s1 << endl;                    //china
    cout << strlen(s1) << endl;         //5
    cout << sizeof(s1) << endl;         //6
    strcpy(s1, s2);
    cout << s1 << endl;                    //ch

    for(int i=0; i<5; i++)
    {
        cout << s1[i] << endl;  //c h   n a
    }
    cout << strlen(s1) << endl;         //2
    cout << sizeof(s1) << endl;         //6
    return 0;
}
时间: 2024-07-30 02:04:01

strcpy函数用法以及底层实现的相关文章

C/C++中strcpy函数的用法

C语言标准库函数 原型声明:extern char *strcpy(char *dest,char *src); 头文件:string.h 功能:把src所指由NULL结束的字符串复制到dest所指的数组中. 说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串. 返回指向dest的指针. 典型实现 /********************** * C语言标准库函数strcpy的一种典型的工业级的最简实现 * 返回值: * 返回目标串的地址. * 对于出现

string.h文件中函数用法

下面为string.h文件中函数的详细用法: strcpy函数名:strcpy功 能: 拷贝一个字符串到另一个用 法: char *strcpy(char *destin, char *source); strncpy函数名:strncpy原型:char *strncpy(char *dest, char *src,size_tn);功能:将字符串src中最多n个字符复制到字符数组dest中(它并不像strcpy一样遇到NULL才停止复制,而是等凑够n个字符才开始复制),返回指向dest的指针.

CString 成员函数用法大全

CString的构造函数CString( );例:CString csStr; CString( const CString& stringSrc );例:CString csStr("ABCDEF中文123456");    CString csStr2(csStr); CString( TCHAR ch, int nRepeat = 1 );例:CString csStr('a',5);//csStr="aaaaa" CString( LPCTSTR l

Matlab中的随即置乱函数randperm和randsample函数用法对比

Matlab中的randperm和randsample函数用法对比 转载:http://blog.sina.com.cn/s/blog_a4034b280101k4gg.html 构建替代数据的时候,一种常见的思路是打乱原数据的排列次序,通过随机置换原数据的排列次序从而产生和原数据系列统计特征(如均值.方差.分布)一致的随机数据.具体到Matlab中,此思路的实现会涉及到两个命令:randperm和randsample p.s. 相关的重新排序命令还包括: Reordering Algorith

VS部分安全函数用法

在 VS(Visual Studio)下编译C语言程序,有时候VS会报错,提示用到的一些函数可能不安全,并且建议替换为带有_s后缀的安全函数. 安全函数是什么 scanf().gets().fgets().strcpy().strcat() 等都是C语言自带的函数,它们都是标准函数,但是它们都有一个缺陷,就是不安全,可能会导致数组溢出或者缓冲区溢出,让黑客有可乘之机,从而发起"缓冲区溢出"攻击.scanf_s().gets_s().fgets_s().strcpy_s().strcat

Oracle 中 decode 函数用法

Oracle 中 decode 函数用法 含义解释:decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 该函数的含义如下:IF 条件=值1 THEN RETURN(翻译值1)ELSIF 条件=值2 THEN RETURN(翻译值2) ......ELSIF 条件=值n THEN RETURN(翻译值n)ELSE RETURN(缺省值)END IFdecode(字段或字段的运算,值1,值2,值3) 这个函数运行的结果是,当字段或字段的运算的值等于值1时,该函数返回值

C#字符串的截取函数用法总结

这篇文章主要介绍了C#字符串的截取函数用法,实例总结了substring,Remove,indexOf等函数的用法,并对具体应用进行了实例分析,需要的朋友可以参考下 本文实例总结了C#常用的字符串截取函数用法.分享给大家供大家参考.具体分析如下: 在C#中字符串截取函数包括有substring 函数,Remove 函数,indexOf 函数,它们三个都可以对字符串进行截取操作,下面我们来分别介绍一下. 下面是截取字符串过程中我们必须知道的以下函数:substring 函数.Remove 函数.i

python之函数用法capitalize()

# -*- coding: utf-8 -*- #python 27 #xiaodeng #python之函数用法capitalize() #capitalize() #说明:将字符串的第一个字母变成大写,其他字母变小写. ''' capitalize(...) S.capitalize() -> string Return a copy of the string S with only its first character capitalized. ''' #案例 str='xiaoden

Python成长之路第二篇(1)_数据类型内置函数用法

数据类型内置函数用法int 关于内置方法是非常的多这里呢做了一下总结 (1)__abs__(...)返回x的绝对值 #返回x的绝对值!!!都是双下划线 x.__abs__() <==> abs(x) 例如: #!/usr/bin/python print "abs(-45) : ", abs(-45) print "abs(100.12) : ", abs(100.12) print "abs(119L) : ", abs(119L)