程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C說話中字符串的內存地址操作的相干函數簡介

C說話中字符串的內存地址操作的相干函數簡介

編輯:關於C++

C說話中字符串的內存地址操作的相干函數簡介。本站提示廣大學習愛好者:(C說話中字符串的內存地址操作的相干函數簡介)文章只能為提供參考,不一定能成為您想要的結果。以下是C說話中字符串的內存地址操作的相干函數簡介正文


C說話bcopy()函數:復制內存(字符串)
頭文件:

#include <string.h>

bcopy() 函數用來復制內存(字符串),其原型為:

 void bcopy(const void *src, void *dest, int n);

【參數】src 為源內存塊(字符串)指針,dest 為目的內存塊(字符串)指針,n 為要復制的內存(字符串)的前 n 個字節長度。

bcopy()與memcpy()一樣都是用來拷貝src 所指的內存內容前n 個字節到dest 所指的地址,不外參數src 與dest 在傳給函數時是相反的地位。

bcopy() 不檢討內存(字符串)中的空字節 NULL。

現實上,bcopy() 和 memcpy() 功效雷同,用來復制內存塊的前 n 個字節,然則 s1, s2 兩個參數為指針,又很奇異的位於 string.h 文件中,所以也能夠用來復制字符串。

留意:bcopy() 不是尺度函數,沒有在ANSI中界說,筆者在VC6.0和MinGW5下編譯沒經由過程;據稱Linux下的GCC支撐,不外筆者沒有親測。鑒於此,照樣應用 memcpy() 替換吧。

更多信息請檢查:C說話bcopy()和memcpy()、bzero()和memset()、bcmp()和memcmp()幾個函數的差異

筆者界說了一個宏,在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]);
}

履行成果:

bcopy() : string(a)
memcpy() :string(a)

C說話bzero()函數:將內存(字符串)前n個字節清零
頭文件:

#include <string.h>

bzero() 會將內存塊(字符串)的前n個字節清零,其原型為:

 void bzero(void *s, int n);

【參數】s為內存(字符串)指針,n 為須要清零的字節數。

bzero()會將參數s 所指的內存區域前n 個字節,全體設為零值。

現實上,bzero(void *s, int n) 等價於 memset((void*)s, 0,size_tn),用來將內存塊的前 n 個字節清零,然則 s 參數為指針,又很奇異的位於 string.h 文件中,也能夠用來清零字符串。

留意:bzero() 不是尺度函數,沒有在ANSI中界說,筆者在VC6.0和MinGW5下編譯沒經由過程;據稱Linux下的GCC支撐,不外筆者沒有親測。鑒於此,照樣應用 memset() 替換吧。

C說話bcmp()函數:比擬內存(字符串)的前n個字節能否相等
頭文件:

#include <string.h>

bcmp() 比擬內存(字符串)的前n個字節能否相等,其原型為:

 int bcmp(const void *s1, const void * s2, int n);

【參數】s1, s2 為須要比擬的兩塊內存(或兩個字符串),n 為要比擬的長度。

【前往值】假如 s1, s2 的前 n 個字節相等或許 n 等於 0,則前往 0,不然前往非 0 值。

bcmp() 函數不檢討NULL。

現實上,bcmp() 和 memcmp() 功效雷同,用來比擬內存塊的前 n 個字節能否相等,然則 s1, s2 兩個參數為指針,又很奇異的位於 string.h 文件中,也能夠用來比擬字符串。

留意:bcmp() 不是尺度函數,沒有在ANSI中界說,筆者在VC6.0和MinGW5下編譯沒經由過程;據稱Linux下的GCC支撐,不外筆者沒有親測。鑒於此,照樣應用 memcmp() 替換吧。


勉為其難的舉個例子吧:
復制純文本新窗口

#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;
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved