JUST DO IT ~

          我只想當個程序員

          memcpy_s strncpy 目標緩沖區 小于 實際緩沖區

           

          目標緩沖區 小于 實際緩沖區

           

          char *name = "1234567890";
          char name2[6]={0};

          memcpy_s( name2 ,  sizeof(name2) ,  name, strlen(name));

          動態執行失敗 (DEBUG ASSERTION FAILED !) 運行庫和調試庫都會提示出錯.

           

          注意:    指針sizeof( 指針 ) = 4  

          strncpy(name2,name ,sizeof(name) );             打印name2  1234 

           

          strncpy(name2,name ,strlen(name) );            打印name2   123456IOIPNUUY

          優化這個語句,盡量拷貝內容

          strncpy(name2,name ,   strlen(name)>sizeof(name2)? sizeof(name2): strlen(name)   );

           

           

          目標緩沖區 小于 實際緩沖區

          strncpy(name2,name ,sizeof(name2)-1 );

          sizeof(name2)-1 ------------>讓最后一個name2字符留給\0 否則這個字符也被拷貝了.

           

           

           

          看一下LINUX下的兩個函數的源代碼,印象會更加深刻一些
          void * memcpy(void * dest,const void *src,size_t count)
          {
              char *tmp = (char *) dest, *s = (char *) src;
              while (count--)
                  *tmp++ = *s++;
              return dest;
          }
          char * strcpy(char * dest,const char *src)
          {
              char *tmp = dest;
              while ((*dest++ = *src++) != '\0')
                  /* nothing */;
              return tmp;
          }
          老實講,這兩個函數長得是很帥

           

           

          參考

          http://stackoverflow.com/questions/4593907/difference-between-strncpy-and-memcpy

           

          http://www.cppblog.com/Tim/archive/2011/04/02/143259.aspx

          posted on 2013-09-18 00:12 小高 閱讀(468) 評論(0)  編輯  收藏 所屬分類: C

          導航

          <2013年9月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          統計

          常用鏈接

          留言簿(3)

          隨筆分類(352)

          收藏夾(19)

          關注的blog

          手冊

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 大渡口区| 巴楚县| 渝北区| 定兴县| 海安县| 新源县| 包头市| 札达县| 银川市| 白沙| 平阳县| 定陶县| 皋兰县| 且末县| 石泉县| 丹凤县| 兴义市| 中牟县| 潜山县| 定远县| 陵水| 叙永县| 玉山县| 文化| 社旗县| 皮山县| 武夷山市| 鄂温| 延安市| 兴安盟| 临朐县| 岗巴县| 象山县| 梓潼县| 乌恰县| 阜康市| 镶黄旗| 吕梁市| 樟树市| 公安县| 垫江县|