庫函式strcpy的工作方式

2021-07-23 07:24:38 字數 2211 閱讀 8428

原型:extern char *strcpy(char *dest,char *src);

用法:#include

功能:把src所指由null結束的字串複製到dest所指的陣列中,其操作物件是字串,完成從源字串到目的字串的拷貝。。

說明:src和dest所指記憶體區域不可以重疊且dest必須有足夠的空間來容納src的字串。

返回指向dest的指標。

例:char a[100],b[50];strcpy(a,b);如用strcpy(b,a),要注意a中的字串長度(第乙個『\0』之前)是否超過50位,如超過,則會造成b的記憶體位址溢位。

int sprintf(char *buffer, const char *format, ...);

其操作物件不限於字串,源物件可以是其他基本資料型別變數。

這個函式可以用來實現非字串的基本資料型別向字串型別的轉換。

memcpy

原型:extern void *memcpy(void *dest, void *src, unsigned int count);

用法:#include

功能:由src所指記憶體區域複製count個位元組到dest所指記憶體區域。

說明:src和dest所指記憶體區域不能重疊,函式返回指向dest的指標。可以拿它拷貝任何資料型別的物件。

舉例:char a[100],b[50]; memcpy(b, a, sizeof(b));注意如用sizeof(a),會造成b的記憶體位址溢位。

memset

原型:extern void *memset(void *buffer, int c, int count);

用法:#include

功能:把buffer所指記憶體區域的前count個位元組設定成字元c。

說明:返回指向buffer的指標。用來對一段記憶體空間全部設定為某個字元。

舉例:char a[100];memset(a, '\0', sizeof(a));

memset可以方便的清空乙個結構型別的變數或陣列。

如:struct sample_struct

;對於變數

struct sample_strcut sttest;

一般情況下,清空sttest的方法:

sttest.csname[0]='\0';

sttest.iseq=0;

sttest.itype=0;

用memset就非常方便:

memset(&sttest,0,sizeof(struct sample_struct));

如果是陣列:

struct sample_struct   test[10];

則memset(test,0,sizeof(struct sample_struct)*10);

對這個問題有疑問,不是對函式的疑問,而是因為沒有弄懂mem和str的區別。

mem是一段記憶體,他的長度,必須你自己記住

str也是一段記憶體,不過它的長度,你不用記,隨時都可以計算出來

所以memcpy需要第三個引數,而strcpy不需要

很多公司的面試官在面試程式設計師的時候,要求應聘者寫出庫函式strcpy()的工作方式或者叫實現,很多人以為這個題目很簡單,實則不然,別看這麼乙個小小的函式,他可以從三個方面來考查:

(1)程式設計風格

(2)出錯處理

(3)演算法複雜度分析(用於提高效能)

如果這個題目10分的話,我們列出2分到10分的答案:

2分void strcpy( char *strdest, char *strsrc )

4分void strcpy( char *strdest, const char *strsrc ) 

//將源字串加const,表明其為輸入引數,加2分

7分void strcpy(char *strdest, const char *strsrc) 

10分//為了實現鏈式操作,將目的位址返回,加3分!

char * strcpy( char *strdest, const char *strsrc ) 

從2分到10分的幾個答案我們可以清楚的看到,小小的strcpy竟然暗藏著這麼多玄機,真不是蓋的!需要多麼紮實的基本功才能寫乙個完美的strcpy啊!

看了不同分值的strcpy版本,應該也可以寫出乙個10分的strlen函式了,

完美的版本為: int strlen( const char *str ) //輸入引數const

return len;}

庫函式strcpy strlen的工作方式

庫函式strcpy的工作方式,如果編寫乙個標準strcpy函式的總分值為10,下面給出幾個不同得分的答案 2分void strcpy char strdest,char strsrc 4分void strcpy char strdest,const char strsrc 將源字串加const,表明...

strcpy與strncpy工作方式及其區別

strcpy中的迴圈語句 while strdest strsrc 0 這個迴圈會一直執行,直到迴圈條件為空,即 0 也就是說,如果strdest所指的儲存空間不夠大的話,這個函式會將strsrc中的部分內容拷貝到strdest所指記憶體空間後面的記憶體中。而strdest所指空間後面的記憶體卻是不...

工作方式問題

連續幾天的開發培訓終於結束了,明天開始就要實踐了。今天的活動是一團糟。離開公司之前將thunderbird的郵件備份,僅是把原來備份的資料夾複製到預設目錄下,但是卻生成了幾個帶亂碼的收件箱資料夾,非常亂,還不能刪除。後來看了下,是自己把這個資料夾儲存成唯讀的。刪了原來的帳戶,重新新增,結果更是麻煩。...