原型: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的郵件備份,僅是把原來備份的資料夾複製到預設目錄下,但是卻生成了幾個帶亂碼的收件箱資料夾,非常亂,還不能刪除。後來看了下,是自己把這個資料夾儲存成唯讀的。刪了原來的帳戶,重新新增,結果更是麻煩。...