• strcpy、strncpy、memcpy的区别


    一、strcpy、strncpy区别

    struct gpInfo
    {
        char gpcode[9];
        char gpName[50];
    };
    
    string gpstr = "SZ000001";
    string Name = "平安银行"
    
    gpInfo gpOne;
    strncpy(gpOne.gpcode,gpstr.c_str(),8);
    strncpy(gpOne.gpName,Name.c_str(),49);
    
    //strcpy不仅复制字符串内容,还会复制字符串的结束符。
    //strncpy不会自动拷贝''结束符。"SZ000001"占8个字节,所以在结构体定义的时候,char gpcode[9]至少要多给一个字节为9,不然会导致乱码。
    

    二、strcpy、memcpy区别

    strcpy和memcpy主要有以下3方面的区别。
    1、复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。
    2、复制的方法不同。strcpy不需要指定长度,它遇到被复制字符的串结束符""才结束,所以容易溢出。memcpy则是根据其第3个参数决定复制的长度。
    3、用途不同。通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy

    #define MAX_REMOETCALC 16
    struct BsValInfo
    {
    	short		set;
    	char		code[7];
    	float		f[MAX_REMOETCALC];
    
    
    	BsValInfo()
    	{
    		memset(this,0,sizeof(BsValInfo));
    	}
    };
    
    string sCode = "0000001";
    string sMarket = sCode.substr(0,1);
    short shtMarket = atol(sMarket.c_str());
    const char * stockinfo = sCode.c_str();
    float f[16] = {0};
    for (int i = 0; i < MAX_REMOETCALC; i++)
    {
    	f[i] = i;
    }
    
    BsValInfo bsone;
    bsone.set = shtMarket;
    strcpy(bsone.code, stockinfo+1);//strcpy
    memcpy(bsone.f, f, MAX_REMOETCALC*sizeof(float));//memcpy
  • 相关阅读:
    1022. 从根到叶的二进制数之和
    剑指 Offer 54. 二叉搜索树的第k大节点
    枚举--百练2811--熄灯问题
    UVA 572 BFS 图论入门
    百练1088 DP+DFS 迷宫问题
    poj 1661 动态规划 拯救老鼠
    入坑动态规划!POJ 1458字符串最大公共子序列
    文件后缀批处理
    奇妙的算法--UVA 679(二叉树的编号)
    栈_uva514
  • 原文地址:https://www.cnblogs.com/SZxiaochun/p/6377068.html
Copyright © 2020-2023  润新知