C語言中字符串的內(nèi)存地址操作的相關(guān)函數(shù)簡介
C語言bcopy()函數(shù):復(fù)制內(nèi)存(字符串)
頭文件:
#include <string.h>
bcopy() 函數(shù)用來復(fù)制內(nèi)存(字符串),其原型為:
void bcopy(const void *src, void *dest, int n);
【參數(shù)】src 為源內(nèi)存塊(字符串)指針,dest 為目標內(nèi)存塊(字符串)指針,n 為要復(fù)制的內(nèi)存(字符串)的前 n 個字節(jié)長度。
bcopy()與memcpy()一樣都是用來拷貝src 所指的內(nèi)存內(nèi)容前n 個字節(jié)到dest 所指的地址,不過參數(shù)src 與dest 在傳給函數(shù)時是相反的位置。
bcopy() 不檢查內(nèi)存(字符串)中的空字節(jié) NULL。
實際上,bcopy() 和 memcpy() 功能相同,用來復(fù)制內(nèi)存塊的前 n 個字節(jié),但是 s1, s2 兩個參數(shù)為指針,又很奇怪的位于 string.h 文件中,所以也可以用來復(fù)制字符串。
注意:bcopy() 不是標準函數(shù),沒有在ANSI中定義,筆者在VC6.0和MinGW5下編譯沒通過;據(jù)稱Linux下的GCC支持,不過筆者沒有親測。鑒于此,還是使用 memcpy() 替代吧。
更多信息請查看:C語言bcopy()和memcpy()、bzero()和memset()、bcmp()和memcmp()幾個函數(shù)的差別
筆者定義了一個宏,在VC6.0下編譯通過,代碼如下:
#include <stdio.h>
#include <string.h>
#define bcopy(a, b, c) memcpy(a, b, c)
main(){
char dest[30] = "string(a)";
char src[30] = "string\0string";
int i;
bcopy(src, dest, 30); //src 指針放在前
printf("bcopy(): ");
for(i = 0; i < 30; i++)
printf("%c", dest[i]);
memcpy(dest, src, 30); //dest 指針放在錢
printf("\nmemcpy() : ");
for(i = 0; i < 30; i++)
printf("%c", dest[i]);
}
執(zhí)行結(jié)果:
bcopy() : string(a) memcpy() :string(a)
C語言bzero()函數(shù):將內(nèi)存(字符串)前n個字節(jié)清零
頭文件:
#include <string.h>
bzero() 會將內(nèi)存塊(字符串)的前n個字節(jié)清零,其原型為:
void bzero(void *s, int n);
【參數(shù)】s為內(nèi)存(字符串)指針,n 為需要清零的字節(jié)數(shù)。
bzero()會將參數(shù)s 所指的內(nèi)存區(qū)域前n 個字節(jié),全部設(shè)為零值。
實際上,bzero(void *s, int n) 等價于 memset((void*)s, 0,size_tn),用來將內(nèi)存塊的前 n 個字節(jié)清零,但是 s 參數(shù)為指針,又很奇怪的位于 string.h 文件中,也可以用來清零字符串。
注意:bzero() 不是標準函數(shù),沒有在ANSI中定義,筆者在VC6.0和MinGW5下編譯沒通過;據(jù)稱Linux下的GCC支持,不過筆者沒有親測。鑒于此,還是使用 memset() 替代吧。
C語言bcmp()函數(shù):比較內(nèi)存(字符串)的前n個字節(jié)是否相等
頭文件:
#include <string.h>
bcmp() 比較內(nèi)存(字符串)的前n個字節(jié)是否相等,其原型為:
int bcmp(const void *s1, const void * s2, int n);
【參數(shù)】s1, s2 為需要比較的兩塊內(nèi)存(或兩個字符串),n 為要比較的長度。
【返回值】如果 s1, s2 的前 n 個字節(jié)相等或者 n 等于 0,則返回 0,否則返回非 0 值。
bcmp() 函數(shù)不檢查NULL。
實際上,bcmp() 和 memcmp() 功能相同,用來比較內(nèi)存塊的前 n 個字節(jié)是否相等,但是 s1, s2 兩個參數(shù)為指針,又很奇怪的位于 string.h 文件中,也可以用來比較字符串。
注意:bcmp() 不是標準函數(shù),沒有在ANSI中定義,筆者在VC6.0和MinGW5下編譯沒通過;據(jù)稱Linux下的GCC支持,不過筆者沒有親測。鑒于此,還是使用 memcmp() 替代吧。
勉為其難的舉個例子吧:
復(fù)制純文本新窗口
#include <stdio.h>
#include <string.h>
int main ()
{
char *s1 = "Golden Global View";
char *s2 = "Golden Global View";
if( !bcmp(s1, s2, 7) )
printf("s1 equal to s2 in first 7 bytes");
else
printf("s1 not equal to s2 in first 7 bytes");
return 0;
}
相關(guān)文章
C/C++ assert()函數(shù)用法案例總結(jié)
這篇文章主要介紹了C/C++ assert()函數(shù)用法案例總結(jié),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下2021-09-09
C語言驅(qū)動開發(fā)內(nèi)核枚舉IoTimer定時器解析
這篇文章主要為大家介紹了C語言驅(qū)動開發(fā)內(nèi)核枚舉IoTimer定時器解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-10-10
C++中的類型查詢之探索typeid和type_info(推薦)
C++ 是一種靜態(tài)類型語言,這意味著每個變量的類型在編譯時就已經(jīng)確定,在這篇技術(shù)分享中,我們將探討 C++ 中的 typeid 和 type_info,以及如何使用它們來獲取類型信息,需要的朋友可以參考下2024-05-05
Win11+?VS2022編譯?FFmpeg6.0?靜態(tài)庫的詳細過程
這篇文章主要介紹了Win11+VS2022編譯FFmpeg6.0靜態(tài)庫的方法,本文通過圖文實例代碼相結(jié)合給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-08-08
vs2019中使用MFC構(gòu)建簡單windows窗口程序
今天發(fā)現(xiàn)網(wǎng)上好多MFC代碼都不能用,給大家分享一個簡單的MFC窗口語言,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-06-06

