網(wǎng)站首頁 編程語言 正文
strcpy
拷貝字符串到目標(biāo)地址
函數(shù)原型
char?*strcpy(?char?*?destination,?const?char?*?source?)
參數(shù)講解
參數(shù) | destination | source |
解釋 | 目標(biāo)字符串地址 | 以 Null 結(jié)尾的源字符串地址 |
返回值詳解
這些函數(shù)中的每一個都返回目標(biāo)字符串,沒有返回值就是拷貝失敗。
函數(shù)詳解
strcpy使用時幾個注意點
?第一個注意點:源字符串必須以‘\0’結(jié)束,同時會將源字符串中的‘\0’拷貝到目標(biāo)空間。
就是說當(dāng)我們把源字符串拷貝到目標(biāo)地址時什么時候停止呢,就是當(dāng)把源字符串中的‘\0’也拷貝過去時結(jié)束。
用以下代碼為例,就是說當(dāng)arr2中f拷貝到arr1中時,strcpy還會把a(bǔ)rr2中的‘\0’拷貝到arr1中
#include#include int main() { char arr1[8]; char arr2[] = "abcdef"; strcpy(arr1, arr2); printf("%s\n", arr1); return 0; }
?而如果arr2中沒有‘\0’時,看如下圖片所示,strcpy會越界訪問直到程序崩潰!
?而當(dāng)給arr2中添加'\0'時,程序就很容易就編譯過去了?
所以在源地址中一定要存在'\0'
第二個注意點:目標(biāo)空間必須足夠大,以確保能存放源字符串
假如我們把a(bǔ)rr2中的七個字符拷貝到arr1中去,遺憾的是arr1只有四個空間不夠大,這時我們還調(diào)用strcpy,就會發(fā)現(xiàn)程序崩了!
?為什么程序會崩了呢?原因很簡單,就是‘裝不下’,arr1的??臻g被破壞了。
而作為程序員的我們,必須保證目標(biāo)空間足夠大,strcpy本身是不考慮這些問題的(很滑稽是不是,有一種你叫我干啥我干啥,出事了還怪我嘍的味道)
第三個注意點:目標(biāo)空間必須可變
例如下面這個代碼,arr1指向"qwertyuiop"(這個字符串足夠長吧),現(xiàn)在要求把a(bǔ)rr2中的字符串拷貝到arr1中去,大家覺得結(jié)果會是什么?
#include#include int main() { char* arr1 = "qwertyuiop"; char arr2[] = "abcedf"; strcpy(arr1, arr2); printf("%s", arr1); return 0; }
看到這想必大家心理應(yīng)該都有答案了,調(diào)試一下發(fā)現(xiàn)程序又崩了!這是為什么呢?
?就是因為arr1指向的是常量字符串,常量是不可修改的。如果非要寫成代碼去修改它,抱歉只能報錯了。所以大家使用strcpy是目的地必須是可修改的。
總結(jié)
原文鏈接:https://blog.csdn.net/weixin_53564801/article/details/123618989
相關(guān)推薦
- 2022-11-26 Qt實現(xiàn)模糊匹配功能的實例詳解_C 語言
- 2022-11-22 Android?10?啟動分析之init語法詳解_Android
- 2022-12-28 詳解Flink同步Kafka數(shù)據(jù)到ClickHouse分布式表_數(shù)據(jù)庫其它
- 2022-11-25 Linux?Shell腳本多命令執(zhí)行邏輯的示例詳解_linux shell
- 2024-01-31 nginx配置文件中最后一個 include servers/*;作用是什么?
- 2022-04-01 詳解Prometheus自動發(fā)現(xiàn)之file_sd_config
- 2024-02-01 mybatis plus 分頁查詢出現(xiàn)count()
- 2022-05-05 利用Python編寫一個記憶翻牌游戲_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支