亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

詳解C語言中的memset()函數(shù)

 更新時間:2015年08月26日 15:20:37   作者:But_Bueatiful  
這篇文章主要介紹了C語言中的memset()函數(shù),包括其與memcpy()函數(shù)的區(qū)別,需要的朋友可以參考下

C語言memset()函數(shù):將內存的前n個字節(jié)設置為特定的值
頭文件:

#include <string.h>

memset() 函數(shù)用來將指定內存的前n個字節(jié)設置為特定的值,其原型為:

  void * memset( void * ptr, int value, size_t num );

參數(shù)說明:
ptr 為要操作的內存的指針。
value 為要設置的值。你既可以向 value 傳遞 int 類型的值,也可以傳遞 char 類型的值,int 和 char 可以根據(jù) ASCII 碼相互轉換。
num 為 ptr 的前 num 個字節(jié),size_t 就是unsigned int。

【函數(shù)說明】memset() 會將 ptr 所指的內存區(qū)域的前 num 個字節(jié)的值都設置為 value,然后返回指向 ptr 的指針。

memset() 可以將一段內存空間全部設置為特定的值,所以經常用來初始化字符數(shù)組。例如:

char str[20];
memset(str, '\0', sizeof(str)-1);

【返回值】返回指向 ptr 的指針。

注意:參數(shù) value 雖聲明為 int,但必須是 unsigned char,所以范圍在0 到255 之間。

范例:
復制純文本新窗口

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
  // 不可以聲明為 char *str = "http://c.biancheng.net";
  char str[] = "http://c.biancheng.net";
  memset(str, '-', 7);
  puts(str);
  system("pause");
  return EXIT_SUCCESS;
}

執(zhí)行結果:

-------c.biancheng.net

memmove 和 memcpy的區(qū)別
memcpy和memmove()都是C語言中的庫函數(shù),在頭文件string.h中,作用是拷貝一定長度的內存的內容,原型分別如下:

void *memcpy(void *dst, const void *src, size_t count);

void *memmove(void *dst, const void *src, size_t count); 

他們的作用是一樣的,唯一的區(qū)別是,當內存發(fā)生局部重疊的時候,memmove保證拷貝的結果是正確的,memcpy不保證拷貝的結果的正確。

第一種情況下,拷貝重疊的區(qū)域不會出現(xiàn)問題,內容均可以正確的被拷貝。
第二種情況下,問題出現(xiàn)在右邊的兩個字節(jié),這兩個字節(jié)的原來的內容首先就被覆蓋了,而且沒有保存。所以接下來拷貝的時候,拷貝的是已經被覆蓋的內容,顯然這是有問題的。
實際上,memcpy只是memmove的一個子集。

二者的c語言實現(xiàn)很簡單,有興趣的朋友可以去看看。在實際情況下,這兩個函數(shù)都是用匯編實現(xiàn)的。

memmove在copy兩個有重疊區(qū)域的內存時可以保證copy的正確,而memcopy就不行了,但memcopy比memmove的速度要快一些,如:
char s[] = "1234567890";
char* p1 = s;
char* p2 = s+2;
memcpy(p2, p1, 5)與memmove(p2, p1, 5)的結果就可能是不同的,memmove()可以將p1的頭5個字符"12345"正確拷貝至p2,而memcpy()的結果就不一定正確了

memcpy()、 memmove()和memccpy()

    這三個函數(shù)的功能均是將某個內存塊復制到另一個內存塊。前兩個函數(shù)的區(qū)別在于它們處理內存區(qū)域重疊(overlapping)的方式不同。第三個函數(shù)的功能也是復制內存,但是如果遇到某個特定值時立即停止復制。
    對于庫函數(shù)來說,由于沒有辦法知道傳遞給他的內存區(qū)域的情況,所以應該使用memmove()函數(shù)。通過這個函數(shù),可以保證不會出現(xiàn)任何內存塊重疊問題。而對于應用程序來說,因為代碼“知道”兩個內存塊不會重疊,所以可以安全地使用memcpy()函數(shù)。

關于memmove的實現(xiàn):

void *mymemmove(void *dest, const void *src, size_t n)
{
  char temp[n];
  int i;
  char *d = dest;
  const char *s = src;

  for (i = 0; i < n; i++) 
    temp[i] = s[i];
  for (i = 0; i < n; i++) 
    d[i] = temp[i];

  return dest;
}

關于memcpy的實現(xiàn):

void *mymemcpy(void *dest, const void *src, size_t n)
{
  char *d = dest;
  const char *s = src;
  int *di;
  const int *si;
  int r = n % 4;
  
  while (r--)
    *d++ = *s++;
  di = (int *)d;
  si = (const int*)s;
  n /= 4;
  while (n--)
    *di++ = *si++;

  return dest;
}

相關文章

  • C/C++如何獲取當前系統(tǒng)時間的實例詳解

    C/C++如何獲取當前系統(tǒng)時間的實例詳解

    這篇文章主要介紹了 C/C++如何獲取當前系統(tǒng)時間的實例詳解的相關資料,這里提供了幾種實現(xiàn)方法,幫助大家實現(xiàn)這樣的功能,需要的朋友可以參考下
    2017-08-08
  • C語言strlen和sizeof在數(shù)組中的使用詳解

    C語言strlen和sizeof在數(shù)組中的使用詳解

    對于 strlen 和 sizeof,相信不少程序員會混淆其功能。雖然從表面上看它們都可以求字符串的長度,但二者卻存在著許多不同之處及本質區(qū)別
    2021-10-10
  • C++中關于set刪除的一些坑

    C++中關于set刪除的一些坑

    這篇文章主要介紹了C++中關于set刪除的一些坑,因為這個問題浪費了很多的時間,所以想著分享出來給大家,方便同樣遇到這個問題的朋友們,有需要的朋友們下面來一起看看吧。
    2017-02-02
  • C語言位運算符:與、或、異或、取反、左移與右移詳細介紹

    C語言位運算符:與、或、異或、取反、左移與右移詳細介紹

    以下是對C語言中的位運算符:與、或、異或、取反、左移與右移進行了詳細的分析介紹,需要的朋友可以過來參考下
    2013-08-08
  • C++實現(xiàn)LeetCode(107.二叉樹層序遍歷之二)

    C++實現(xiàn)LeetCode(107.二叉樹層序遍歷之二)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(107.二叉樹層序遍歷之二),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-07-07
  • C++實現(xiàn)涂色游戲(博弈)

    C++實現(xiàn)涂色游戲(博弈)

    這篇文章主要為大家詳細介紹了C++實現(xiàn)涂色游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • C語言實現(xiàn)猜數(shù)字的小游戲

    C語言實現(xiàn)猜數(shù)字的小游戲

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)猜數(shù)字的小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-01-01
  • C++?如何將Lambda轉換成函數(shù)指針

    C++?如何將Lambda轉換成函數(shù)指針

    這篇文章主要介紹了C++?如何將Lambda轉換成函數(shù)指針,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • C++中的多態(tài)與虛函數(shù)的內部實現(xiàn)方法

    C++中的多態(tài)與虛函數(shù)的內部實現(xiàn)方法

    下面小編就為大家?guī)硪黄狢++中的多態(tài)與虛函數(shù)的內部實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • C語言求兩個正整數(shù)的最大公約數(shù)示例代碼

    C語言求兩個正整數(shù)的最大公約數(shù)示例代碼

    在C語言中求兩個數(shù)的最大公約數(shù)是學習循環(huán)語句的非常經典的問題,下面這篇文章主要給大家介紹了關于C語言求兩個正整數(shù)的最大公約數(shù)的相關資料,需要的朋友可以參考下
    2021-12-12

最新評論