cpp中memset函數的注意點


可參考:

C++中memset函數的用法  

C++中memset函數的用法

C++中memset()函數的用法詳解

c/c++學習系列之memset()函數

透徹分析C/C++中memset函數

 

 

 

memset()是char型初始化函數。

 

一. 頭文件:<string.h> 或 <memory.h>

 

二. 函數原型:void *memset(void *s, int ch, size_t n);

 

函數功能:將s所指向的某一塊內存中的前n個字節的內容全部設置為ch指定的ASCII值, 第一個值為指定的內存地址,塊的大小由第三個參數指定,這個函數通常為新申請的內存做初始化工作, 其返回值為指向s的指針,它是對較大的結構體或數組進行清零操作的一種最快方法。

 

三. 使用

 

memset(結構體/數組名 , 用於替換的ASCII碼對應字符 , 前n個字符 );

memset(結構體/數組名 , "用於替換的字符“ , 前n個字符 );

函數解釋:將s中的前n個字節用ch替換並且返回s

函數作用:在一段內存塊中填充某一個給定的值,常用於較大的對結構體和數組的清零操作。

 

例子1:

復制代碼
#include<iostream>
//#include"string.h"
using namespace std;
int main()
{
    char str[10];
    str[9] = 'w';
    memset(str,97,9);
    for(int i=0;i<10;i++){
        cout<<str[i]<<" ";
    }
    return 0;
} 
復制代碼

輸出:a a a a a a a a a w

說明:使用memset似乎不需要使用額外的頭文件。

 

例子2:

復制代碼
#include<iostream>
//#include"string.h"
using namespace std;
int main()
{
    char str[10];
    str[9] = 'w';
    memset(str,97,sizeof(char)*10);
    for(int i=0;i<10;i++){
        cout<<str[i]<<" ";
    }
    return 0;
} 
復制代碼

輸出:a a a a a a a a a a

 

例子3:

復制代碼
#include<iostream>
using namespace std;
int main()
{
    char str[10];
    memset(str,65,sizeof(str)-3);
    for(int i=0;i<10;i++){
        cout<<str[i]<<" ";
    } 
    return 0;
}
復制代碼

輸出:A A A A A A A 

 

 

 

四. 幾個注意事項轉自此文 (講解詳細,可多看幾遍)

1.memset是以字節為單位,初始化內存塊。

2.當結構體類型中包含指針時,在使用memset初始化時需要小心。

3.當結構體或類的本身或其基類中存在虛函數時,也需要謹慎使用memset。(筆試中碰到過類似的題,貌似是找錯)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM