zoukankan      html  css  js  c++  java
  • 为什么嵌入式开发用memcpy()而不用strncpy()

    1. strcpy()
      函数声明:char *strcpy(char *dest, const char *src)
      返回参数:指向最终的目标字符串 dest 的指针。
      注意事项:只能复制char类型的字符数组,unsigned char不可以!
              以作为复制的结尾,注意判断溢出。
    2. strncpy()
      函数声明:char *strncpy(char *dest, const char *src, size_t n)
      返回参数:指向最终的目标字符串 dest 的指针。
      注意事项:只能复制char类型的字符数组,unsigned char不可以!
                   n表示要复制的字节数,中途遇到''会停止
    3. memcpy()
      函数声明:void *memcpy(void *str1, const void *str2, size_t n)
      返回参数:无
      注意事项:无复制类型的限制,一般内存内容均可。
                   n表示要复制的字节数。

     为什么嵌入式开发中尽量不要用strcpy()和strncpy()?

     (记录一个最近在调CAN总线相关程序遇到的坑)

     我们知道strcpy和strncpy都以‘’为结尾标志,也就是说无论你指不指定拷贝的字节数,遇到都会自动结束拷贝,剩余的字符用''填充。

     在嵌入式开发中我们大量的用到16进制的数据,所以很可能出现0x00这个数据,而0x00恰好就是'',所以就会造成数据的错误,所以在嵌入式开发中,我们最好用memcpy不会出现这个问题。

  • 相关阅读:
    详说清除浮动
    ie7 z-index 失效问题
    ul里不能直接嵌套div(在ie7以前版本)
    jQuery 发送验证码倒计时按钮
    VBA: Cant find project or librar
    InstallShield Limited Edition制作安装文件
    InstallShield制作升级安装包
    VBA 获取Sheet最大行
    求两条线段交点zz
    VBA找不到progress bar的处理办法。
  • 原文地址:https://www.cnblogs.com/Irvingcode/p/11615400.html
Copyright © 2011-2022 走看看