首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C語言 strcpy 函數完整指南:語法、用法與實作範例

     編輯:關於C語言

strcpy 函數簡介

strcpy 是 C 標準庫 <string.h> 中的字串複製函數,用於將來源字串(包含結束符 '\0')完整複製到目標記憶體區域。其函數原型為:

char *strcpy(char *strDest, const char *strSrc);

參數說明:

  • strDest:目標字串指標,必須指向足夠大的已配置記憶體空間。
  • strSrc:來源字串指標,內容不會被修改。

返回值: 返回 strDest,方便鏈式呼叫。

關鍵概念補充

sizeof 運算子

sizeof 用於計算資料類型或變數佔用的記憶體位元組數(編譯期決定)。對於陣列,返回整個陣列大小;對於指標,返回指標本身大小(通常 4 或 8 位元組)。

strlen 函數

strlen 計算字串實際長度(不含結束符 '\0'),需在執行期遍歷字串。

完整程式範例

#include <stdio.h>
#include <string.h>

int main(void) {
    const char source[10] = "ni hao a!";
    char dest[20];

    strcpy(dest, source);
    puts(dest);

    printf("sizeof(source) = %zu\n", sizeof(source));
    printf("sizeof(dest) = %zu\n", sizeof(dest));
    printf("strlen(dest) = %zu\n", strlen(dest));

    for (int i = 0; i < 20; i++)
        printf("%c", dest[i]);
    puts("\n");

    return 0;
}

執行結果分析

ni hao a!
sizeof(source) = 10
sizeof(dest) = 20
strlen(dest) = 9
ni hao a! 燙燙燙燙燙

重點觀察:

  • sizeof(source) 為 10,包含 9 個字元 + 1 個結束符。
  • sizeof(dest) 為 20,反映陣列宣告大小,非實際字串長度。
  • strlen(dest) 為 9,僅計算有效字元。
  • 陣列剩餘空間顯示「燙燙燙...」,這是 VC6.0 Debug 模式下未初始化記憶體的填充模式(0xCC)。

strcpy 經典實作

char *strcpy(char *strDest, const char *strSrc) {
    if (strDest == NULL || strSrc == NULL)
        return NULL;
    if (strDest == strSrc)
        return strDest;

    char *tempPtr = strDest;
    while ((*strDest++ = *strSrc++) != '\0');
    return tempPtr;
}

實作要點:

  1. 空指標檢查:防止解參考 NULL 導致崩潰。
  2. 自我複製檢查:避免不必要的操作。
  3. 保存起始位址:返回值需指向目標字串開頭。
  4. 單行複製迴圈:利用賦值運算返回值特性,緊湊高效。

安全性提醒

strcpy 不檢查目標緩衝區大小,若來源字串過長會導致緩衝區溢位。現代開發建議使用 strncpy、strcpy_s (C11) 或 snprintf 等安全替代方案。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved