程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> 關於C >> 關於strcpy,strncpy以及memcpy的學習

關於strcpy,strncpy以及memcpy的學習

編輯:關於C
1. 函數原型 #include <string.h> char *strcpy(char *dest, const char *src); char *strncpy(char *dest, const char *src, size_t n); void *memcpy(void *dest, const void *src, size_t n); 這幾個函數都能用來copy字符串,但是使用起來要特別小心, 1. 所謂的字符串都是以'\0'字符作為結束標志的, 所以任何時候一定要有意識的預留一個字節用於在字符串最後補上'\0'字符; 2. 使用strcpy函數時,一定要注意如果src字符串的長度大於dest預留的長度, 那麼就會踩內存。踩內存的後果是什麼?一切皆有可能; 3. 使用strncpy函數時,一定要特別注意一個問題:如果一不小心n的取值為 src字符串的長度,那此時strncpy的結果與strcpy的結果是一樣的, 從而就有可能發生踩內存了。所以這個n的取值,應該是以dest預留的大小為准; 4. memcpy它會copy整塊內存,而不會關心這中間是否有'\0'字符的, 所以如果想要copy整塊內存空間,那就只能使用memcpy函數。 如果使用strcpy或strncpy,如果內存空間中恰巧有'\0'字符,那就會出現非預期結果。 5. 什麼使用使用strcpy/strncpy,什麼時候使用memcpy,自己掂量一下吧。 測試代碼如下: #include <stdio.h> #include <string.h> #define MAX_SRC_LENGTH (10) #define MAX_DEST_LENGTH (8) int main(int argc, char* argv[]) {     char src[MAX_SRC_LENGTH] = "123456789";     char dest[MAX_DEST_LENGTH] = {0};          strncpy(dest, src, MAX_SRC_LENGTH);     printf("\nsrc=%s,dest=%s\n", src, dest);          return 0; } 試試看, [sh] gcc main main.c [sh] ./main 猜猜結果會怎樣?
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved