C56-親自實現字符串拷貝函數

一 strcpy簡介

功能:將源字符串(包括 \0)復制到目標地址。

原型

char *strcpy(char *dest, const char *src);
  • 參數:
    • dest:目標地址(需足夠大)。
    • src:源字符串(以 \0 結尾)。
  • 返回值:返回 dest 的指針。

示例

char src[] = "ABC";
char dest[10];
strcpy(dest, src); // dest 變為 "ABC"

風險:不檢查 dest 空間,可能溢出(如 srcdest 長)

一句話總結:快速復制字符串,但需確保目標空間足夠,否則用安全替代函數。

二 封裝自己的strcpy函數

  • 代碼示例:
#include <stdio.h>
#include <string.h>//依據"strcpy"函數原型封裝一個函數用于實現其功能
char *MyStrcpy(char *dest,char *string)
{   //正式操作前進行安全性檢查if(dest==NULL||string==NULL){return NULL;}//函數的主體char *back=dest;    //對目標指針進行保存while(*string!='\0'){*dest=*string;dest++;string++;}*dest='\0';return back;
}int main()
{char str[128]={'\0'};char *p="Hello Word!";MyStrcpy(str,p);printf("%s",str);return 0;
}
  • 成果展示:

image-20250531184324253

三 strncpy簡介

功能:安全復制字符串,限制長度防溢出

用法

char *strncpy(char *dest, const char *src, size_t n);
  • 參數:

    • dest:目標緩沖區(存儲復制結果)。
    • src:源字符串(以 \0 結尾)。
    • n:最多復制的字符數(包括 \0)。
  • 返回值:返回 dest 的指針。

  • 最多復制 n 個字符到 dest

  • src 較短,剩余空間補 \0

  • src 較長,不會自動加 \0

注意

  1. 需確保 dest 足夠大

  2. 建議手動補\0

    dest[n-1] = '\0';
    

示例

char dest[5];
strncpy(dest, "hello", 5);
dest[4] = '\0';  // 安全終止

特點

  • strcpy 安全
  • 需自行處理字符串終止

四 封裝自己的strncpy函數

  • 代碼示例:
#include <stdio.h>
#include <string.h>//依據"strncpy"函數原型封裝一個函數用于實現其功能
char *MyStrncpy(char *dest,char *string,int count)
{   //正式操作前進行安全性檢查if(dest==NULL||string==NULL){return NULL;}//函數的主體char *back=dest;    //對目標指針進行保存while(*string!='\0'&&count>0){*dest=*string;dest++;string++;count--;}if(count>0){while(count>0){count--;*dest++='\0';}return dest;}*dest='\0';return back;
}int main()
{char str[128]={'\0'};char *p="Hello Word!";MyStrncpy(str,p,6);printf("%s",str);return 0;
}
  • 成果展示:

image-20250531191052594

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/83222.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/83222.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/83222.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

設計模式——適配器設計模式(結構型)

摘要 本文詳細介紹了適配器設計模式&#xff0c;包括其定義、核心思想、角色、結構、實現方式、適用場景及實戰示例。適配器模式是一種結構型設計模式&#xff0c;通過將一個類的接口轉換成客戶端期望的另一個接口&#xff0c;解決接口不兼容問題&#xff0c;提高系統靈活性和…

java 開發中 nps的內網穿透 再git 遠程訪問 以及第三放支付接口本地調試中的作用

在Java開發中&#xff0c;NPS內網穿透、Git遠程訪問和第三方支付接口的本地調試結合使用&#xff0c;可以有效提升開發效率和調試能力。以下是它們的具體作用及協作場景&#xff1a; 第一&#xff1a;為什么需要nps內網穿透 1. NPS內網穿透的作用 NPS&#xff08;內網穿透工具…

換ip是換網絡的意思嗎?怎么換ip地址

在數字化時代&#xff0c;IP地址作為我們在網絡世界的"身份證"&#xff0c;其重要性不言而喻。許多人常將"換IP"與"換網絡"混為一談&#xff0c;實際上兩者雖有聯系卻存在本質區別。本文將澄清這一概念誤區&#xff0c;并詳細介紹多種更換IP地址…

云游戲混合架構

云游戲混合架構通過整合本地計算資源與云端能力&#xff0c;形成了靈活且高性能的技術體系&#xff0c;其核心架構及技術特征可概括如下&#xff1a; 一、混合架構的典型模式 分層混合模式? 前端應用部署于公有云&#xff08;如渲染流化服務&#xff09;&#xff0c;后端邏輯…

Docker常用命令操作指南(一)

Docker常用命令操作指南-1 一、Docker鏡像相關命令1.1 搜索鏡像&#xff08;docker search&#xff09;1.2 拉取鏡像&#xff08;docker pull&#xff09;1.3 查看本地鏡像&#xff08;docker images&#xff09;1.4 刪除鏡像&#xff08;docker rmi&#xff09; 二、Docker容器…

軟件性能之CPU

性能是個宏大而駁雜話題&#xff0c;從代碼&#xff0c;到網絡&#xff0c;到實施&#xff0c;方方面面都會涉及到性能問題&#xff0c;網上對性能講解的文章多如牛毛&#xff0c;從原理到方法再到工具都有詳細的介紹&#xff0c;本文雖不能免俗&#xff0c;但期望能從另外一個…

[SC]SystemC在CPU/GPU驗證中的應用(三)

SystemC在CPU/GPU驗證中的應用(三) 摘要:下面分享50個逐步升級SystemC編程能力的示例及建議的學習路線圖。您可以一次一批地完成它們——從前五個基礎的例子開始,然后轉向channels, TLM, bus models, simple CPU/GPU kernels等等。在每個階段掌握之后,再進行下一組…

如何設計高效的數據湖架構:存儲策略、Schema 演進與數據生命周期管理

本文圍繞現代數據湖架構的核心設計理念與實踐展開,重點討論如何高效組織數據存儲、支持 Schema 演進與版本管理、實現冷熱數據分層存儲和生命周期治理,確保數據湖在性能、成本、演進和治理能力上的全面可控。 ?? 一、數據湖架構演進概覽 傳統數據倉庫面對高頻更新、Schema…

建筑兔零基礎人工智能自學記錄101|Transformer(1)-14

Transformer 谷歌提出&#xff0c;一組編碼-解碼器 可以同時處理&#xff0c;通過位置編碼來處理單詞 實質是token詞語接龍&#xff08;只是有不同的概率&#xff09; token對應向量 Transformer簡述 文生圖就需要用到transformer黑箱 token 內部層次 中間主要是embedding…

Unity基礎學習(十二)Unity 物理系統之范圍檢測

目錄 一、關于范圍檢測的主要API&#xff1a; 1. 盒狀范圍檢測 Physics.OverlapBox 2. 球形范圍檢測 Physics.OverlapSphere 3. 膠囊范圍檢測 Physics.OverlapCapsule 4. 盒狀檢測 NonAlloc 版 5. 球形檢測 NonAlloc 版 6. 膠囊檢測 NonAlloc 版 二、關于API中的兩個重…

構建安全高效的郵件網關ngx_mail_ssl_module

一、快速上手&#xff1a;最小配置示例 worker_processes auto;mail {server {# 監聽 IMAP over TLSlisten 993 ssl;protocol imap;# TLS 協議與密碼套件ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers HIGH:!aNULL:!MD5;# 證書與私鑰ssl_…

打卡day41

知識回顧 數據增強卷積神經網絡定義的寫法batch歸一化&#xff1a;調整一個批次的分布&#xff0c;常用與圖像數據特征圖&#xff1a;只有卷積操作輸出的才叫特征圖調度器&#xff1a;直接修改基礎學習率 卷積操作常見流程如下&#xff1a; 1. 輸入 → 卷積層 → Batch歸一化層…

MySQL高級查詢技巧:分組、聚合、子查詢與分頁【MySQL系列】

本文將深入探討 MySQL 高級查詢技巧&#xff0c;重點講解 GROUP BY、HAVING、各種聚合函數、子查詢以及分頁查詢&#xff08;LIMIT 語法&#xff09;的使用。文章內容涵蓋實際應用中最常見的報表需求和分頁實現技巧&#xff0c;適合有一定 SQL 基礎的開發者進一步提升技能。 一…

現代 CSS 高階技巧:實現平滑內凹圓角的工程化實踐

通過 數學計算 CSS mask 復合遮罩 實現的真正幾何內凹效果&#xff1a; 背景是一張圖片&#xff0c;用來證明中間的凹陷是透明的。 完整代碼&#xff1a; app.js import FormPage from "./pages/formPage"; import "./App.css"; const App () > {re…

Qt不同布局添加不同控件

對于這種 不同布局添加不同控件 的情況,可以采用以下幾種簡化方法: 方法 1:使用 std::pair 或 std::tuple 配對(C++17 推薦) for (auto [layout, widget] : {std::pair{m_layoutMistakeCalibrate,

MySQL 事務解析

1. 事務簡介 事務&#xff08;Transaction&#xff09; 是一組操作的集合&#xff0c;它是一個不可分割的工作單位&#xff0c;事務會把所有的操作作為一個整體一起向系統提交或撤銷操作請求&#xff0c;即這些操作要么同時成功&#xff0c;要么同時失敗。 經典案例&#xff1…

PyTorch中 torch.utils.data.DataLoader 的詳細解析和讀取點云數據示例

一、DataLoader 是什么&#xff1f; torch.utils.data.DataLoader 是 PyTorch 中用于加載數據的核心接口&#xff0c;它支持&#xff1a; 批量讀取&#xff08;batch&#xff09;數據打亂&#xff08;shuffle&#xff09;多線程并行加載&#xff08;num_workers&#xff09;自…

在MDK中自動部署LVGL,在stm32f407ZGT6移植LVGL-8.4,運行demo,顯示label

在MDK中自動部署LVGL&#xff0c;在stm32f407ZGT6移植LVGL-8.4 一、硬件平臺二、實現功能三、移植步驟1、下載LVGL-8.42、MDK中安裝LVGL-8.43、配置RTE4、配置頭文件 lv_conf_cmsis.h5、配置lv_port_disp_template 四、添加心跳相關文件1、在STM32CubeMX中配置TIM7的參數2、使能…

德思特新聞 | 德思特與es:saar正式建立合作伙伴關系

德思特新聞 2025年5月9日&#xff0c;德思特科技有限公司&#xff08;以下簡稱“德思特”&#xff09;與德國嵌入式系統專家es:saar GmbH正式達成合作伙伴關系。此次合作旨在將 es:saar 的先進嵌入式開發與測試工具引入中國及亞太市場&#xff0c;助力本地客戶提升產品開發效率…

fork函數小解

學了好久終于搞懂fork函數的一些作用 1. fork函數作用&#xff1a;用于創建新的子進程 這是fork最根本的功能&#xff0c;在父進程里創建新的子進程、 但是創建新的子進程之后呢&#xff1f; 子進程和父進程的關系是什么樣的&#xff1f; 為什么fork得到的子進程返回值為0&am…