memcpy/memset函數的c語言實現

轉載:http://blog.csdn.net/u011118276/article/details/46742341

1、memcpy

頭文件:#include <string.h>

函數原型:void *memcpy(void *dest, const void *src, size_t n)

功能:將指針src指向的內存空間的n個字節復制到dest指針指向的內存空間

參數:src 為原內容內存的起始地址,dest為復制到目標地址的起始地址

返回值:目標dest內存的起始地址

注意:1、內存空間不能夠有重疊;

? ?2、memcpy對于需要復制的內容沒有限制,因此用途更廣;

? ? ? 3、很明確的是memcpy是將 n個字節, ?雖然memcpy對復制的內容完全沒有任何的限制,比如數組,結構體等特殊的結構,如果你想將整個結構體變量的內容復制到dest內存區,最好使用sizeof將要復制的內容的完整大小求出來賦值給n,以保持復制的完整性;

c代碼:

[cpp]?view plain?copy
  1. void?*memCpy(void?*dest,?const?void?*src,?size_t?n)??
  2. {??
  3. ????if?(NULL?==?dest?||?NULL?==?src?||?n?<?0)??
  4. ????????return?NULL;??
  5. ????char?*tempDest?=?(char?*)dest;??
  6. ????char?*tempSrc?=?(char?*)src;??
  7. ??
  8. ????while?(n--?>?0)??
  9. ????????*tempDest++?=?*tempSrc++;??
  10. ????return?dest;??????
  11. }??

2、memset

頭文件:#include <string.h>

函數原型:void *memset(void *s, int c, size_t n)

功能:以s為起始位置的n個字節的內存區域用整數c進行填充

參數:s為內存區域的起始位置,c為要填充的字符,n為要填充多少個字節

返回值:目標s內存的起始地址

注意:1、n表示的是字節數,函數是以字節的形式每次賦值給目標地址;

? ? ? 2、memset函數也是以字節為單位進行賦值的,所以要想在整形數組中給每一位賦確定的非0值,一般來講是不可行的;(下方將有對此說明測試的程序)

c代碼:

[cpp]?view plain?copy
  1. void?*memSet(void?*s,?int?c,?size_t?n)??
  2. {??
  3. ????if?(NULL?==?s?||?n?<?0)??
  4. ????????return?NULL;??
  5. ????char?*?tmpS?=?(char?*)s;??
  6. ????while(n--?>?0)??
  7. ????????*tmpS++?=?c;??
  8. ????????return?s;???
  9. }??

下面是針對注意事項的測試程序:

[cpp]?view plain?copy
  1. #include?<stdio.h>??
  2. #include?<string.h>??
  3. void?*memSet(void?*s,?int?c,?size_t?n)??
  4. {??
  5. ????if?(NULL?==?s?||?n?<?0)??
  6. ????????return?NULL;??
  7. ????char?*?tmpS?=?(char?*)s;??
  8. ????while(n--?>?0)??
  9. ????????*tmpS++?=?c;??
  10. ????return?s;???
  11. }??
  12. int?main()??
  13. {??
  14. ????int?buf[10];??
  15. ????int?i;??
  16. ????printf("%d\n",?sizeof?buf);??
  17. ????for?(i?=?0;?i?<?10;?i++)??
  18. ????????printf("buf[%d]?=?%d\n",?i,?buf[i]);??
  19. ????printf("------------------------------------\n");??
  20. ????memSet(buf,?1,?sizeof(buf));??
  21. ????for?(i?=?0;?i?<?10;?i++)??
  22. ????????printf("buf[%d]?=?%d\n",?i,?buf[i]);??
  23. ????return?0;??
  24. }??

結果:


結果分析:可以看出得出的結果并沒有得到想要的1,而得出不知道是什么的東西;

1的二進制表示是:0000 0000 0000 0000 0000 0000 0000 0001

memset函數也是以字節為單位進行賦值的,指針每次只會向后移動一個字節,依此將值賦給每次的地址中,直到n = 0;

最后在四個字節中賦值的結果為:0000 0001?0000 0001?0000 0001?0000 0001?

十進制顯示就為:16843009

當把數組改成char buf[10]時,顯示的結果如下:(更加證明是以字節方式賦值)





本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/384319.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/384319.shtml
英文地址,請注明出處:http://en.pswp.cn/news/384319.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

計算機網絡(一)計算機網絡體系

計算機網絡&#xff08;一&#xff09;計算機網絡體系一、計算機網絡概述概念功能組成分類二、體系結構和參考模型ISO/OSI模型物理層網絡層傳輸層會話層表示層應用層OSI參考模型與TCP/IP參考模型OSI參考模型與TCP/IP參考模型不同5層參考模型一、計算機網絡概述 概念 計算機網…

計算機網絡(二)物理層

計算機網絡&#xff08;二&#xff09;物理層一、通信基礎物理層接口特性1.機械特性2.電氣特性3.功能特性4.規程特性典型的數據通信模型三種通信方式1.單工通信2.半雙工通信/雙向交替通信3.全雙工通信/雙向同時通信數據傳輸方式串行傳輸并行傳輸同步傳輸異步傳輸二、數據交換方…

計算機網絡(三)數據鏈路層

計算機網絡&#xff08;三&#xff09;數據鏈路層1.基本概念2.功能概述3.組幀字符計數法字符填充法零比特填充法違規編碼法4.差錯控制檢錯編碼奇偶校驗碼CRC循環冗余碼糾錯編碼海明碼流量控制停止等待協議滑動窗口協議后退N幀協議&#xff08;GBN&#xff09;選擇重傳協議5.介質…

libevent網絡編程例子(1)

轉載&#xff1a;http://blog.csdn.net/huangyimo/article/details/46806193 這篇文章介紹下libevent在socket異步編程中的應用。在一些對性能要求較高的網絡應用程序中&#xff0c;為了防止程序阻塞在socket I/O操作上造成程序性能的下降&#xff0c;需要使用異步編程&#xf…

計算機網絡(四)網絡層

計算機網絡&#xff08;四&#xff09;網絡層一、概述和功能TCP/IP協議棧IP數據報格式IP數據報分片二、ipv4網絡地址轉換&#xff08;NAT&#xff09;子網劃分子網掩碼ARP協議&#xff08;地址解析協議&#xff09;DHCP協議ICMP協議二、ipv6ipv4和ipv6的區別IPv6基本地址類型IP…

Linux下基于socket和多線程的聊天室小程序

轉載&#xff1a;http://blog.csdn.net/robot__man/article/details/52460733 要求&#xff1a;基于TCP編寫&#xff0c;一個聊天室最多100人。 客戶端&#xff1a;   1、用戶需要登錄&#xff0c;登錄時只需要輸入一個昵稱即可無需判斷昵稱是否重復&#xff08;如果其他功…

操作系統(一)計算機系統概述

操作系統&#xff08;一&#xff09;計算機系統概述一、操作系統的概念二、功能和目標資源的管理者向上層提供服務對硬件的擴展三、操作系統的特征并發共享虛擬異步四、操作系統的發展與分類手工操作階段批處理階段單道批處理系統多道批處理系統分時操作系統實時操作系統操作系…

Linux下使用socket傳輸文件的C語言簡單實現

轉載&#xff1a;http://blog.csdn.net/ljd_1986413/article/details/7940938 服務器程序和客戶端程序應當分別運行在兩臺計算機上。 在運行服務器端的計算機終端執行&#xff1a;./file_server 在運行客戶端的計算終端上執行&#xff1a;./file_client ipaddr_server 然后根…

操作系統(二)進程管理

ui 操作系統&#xff08;二&#xff09;進程管理一、進程程序和進程進程控制塊&#xff08;PCB&#xff09;進程的組成進程的特征進程的狀態與轉換進程狀態的轉換進程的組織鏈接方式索引方式進程的控制進程的創建進程的終止進程阻塞進程喚醒進程切換進程通信共享存儲消息傳遞管…

gethostbyname()函數說明

轉載&#xff1a;http://www.cnblogs.com/cxz2009/archive/2010/11/19/1881611.html gethostbyname()函數說明——用域名或主機名獲取IP地址 包含頭文件 #include <netdb.h> #include <sys/socket.h> 函數原型 struct hostent *gethostbyna…

操作系統(三)內存管理

操作系統&#xff08;三&#xff09;內存管理一、程序執行過程裝入的三種方式鏈接的三種方式二、內存管理的概念內存空間的分配與回收連續分配管理方式單一連續分配固定分區分配動態分區分配首次適應算法最佳適應算法最壞適應算法鄰近適應算法非連續分配管理方式基本分頁存儲管…

操作系統(四)文件管理

操作系統&#xff08;四&#xff09;文件管理一、文件系統基礎1.文件邏輯結構無結構文件有結構文件2.文件目錄文件控制塊&#xff08;FCB&#xff09;目錄結構單級目錄兩級目錄結構多級目錄結構無環圖目錄結構3.文件保護口令保護加密保護訪問控制4.文件共享硬鏈接軟鏈接5.文件系…

struct stat結構體簡介

轉載&#xff1a;http://www.cnblogs.com/CSU-PL/archive/2013/06/06/3120757.html 在使用這個結構體和方法時&#xff0c;需要引入&#xff1a; <sys/types.h> <sys/stat.h> struct stat這個結構體是用來描述一個linux系統文件系統中的文件屬性的結構。 可以有兩種…

如何在Ubuntu上安裝GCC編譯器

如何在Ubuntu上安裝GCC編譯器1.首先更新包列表sudo apt update2.安裝build-essential軟件包&#xff1a; sudo apt install build-essential3.驗證GCC編譯器是否已成功安裝&#xff0c;請使用gcc --version命令打印GCC版本 rootubuntu:/home/csd# gcc --version

操作系統(五)輸入/輸出(I/O)管理

操作系統&#xff08;五&#xff09;輸入/輸出&#xff08;I/O&#xff09;管理一、I/O控制器二、I/O控制方式程序直接控制方式中斷驅動方式DMA方式通道控制方式I/O軟件層次結構假脫機技術設備的分配與回收緩沖區單緩沖雙緩沖循環緩沖區緩沖池一、I/O控制器 I/O設備由機械部件…

Linux下的I/O多路復用select,poll,epoll淺析

轉載&#xff1a;http://blog.csdn.net/u011573853/article/details/52105365 一&#xff0c;什么是I/O多路復用 所謂的I/O多路復用在英文中其實叫 I/O multiplexing. 就是單個線程&#xff0c;通過記錄跟蹤每個I/O流(sock)的狀態&#xff0c;來同時管理多個I/O流 。) I/O mu…

計算機組成原理(一)計算機系統概述

計算機組成原理&#xff08;一&#xff09;計算機系統概述一、計算機系統層次結構馮諾伊曼機計算機工作過程多級層次結構一、計算機系統層次結構 馮諾伊曼機 特點&#xff1a; 計算機由五大部件組成指令和數據以同等地位存于存儲 器&#xff0c;可按地址尋訪指令和數據用二進…

計算機組成原理(二)數據的表示和運算

計算機組成原理&#xff08;二&#xff09;數據的表示和運算一、BCD碼二、奇偶校驗碼三、海明碼四、循環冗余校驗碼&#xff08;CRC&#xff09;五、乘法運算原碼乘法補碼乘法六、除法運算原碼除法補碼除法七、浮點數的表示與運算浮點數的運算一、BCD碼 組合式BCD碼&#xff1…

select read write

轉載&#xff1a;http://blog.csdn.net/beginning1126/article/details/8057498 [cpp] view plaincopy <p style"color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; line-height: 26px; text-align: left; "><span style"font-size:14px;…

數據結構(七)圖的遍歷(遞歸非遞歸方法)

圖的遍歷&#xff08;遞歸非遞歸方法&#xff09;#include<iostream> #include<stdio.h> #include<stack> #include<queue> using namespace std;typedef char VertexType; typedef int EdgeType;#define MAXVEX 100 #define INF 65535 bool visited[M…