網站首頁 編程語言 正文
strcpy函數詳解如下
1.函數介紹
1.1.函數接口
char * __cdecl strcpy(char * dst, const char * src);
這里是庫函數里面的函數定義接口。該函數作用是將一組字符串復制到另一組字符串中去,就是所謂的 復制字符串函數。
1.2.函數分析
1、這里是將源字符串拷貝到目標字符串空間中去。
2、源字符串必須以 ‘/0’ 結束。
3、拷貝會將源字符串中的 ‘\0’ 拷貝進去。
4、目標空間必須足夠大,且必須可變。
圖解分析:
2.庫函數strcpy源代碼
char * __cdecl strcpy(char* dst, const char* src)
{
char * cp = dst;
while((*cp++ = *src++) != '\0')
;
return( dst )
}
2.1.庫函數分析
分析:
1、 這里 dst 就是指向目標字符空間的指針,所以不能用const 修飾,必須是可變的;src 是源字符串,源字符串可以用const 修飾。
2、 這里源字符串 src 結尾必須含有 ‘\0’ ,這樣循環里的判斷條件才能成立。
3、這里*cp++ = *strc++這種寫法更加簡便,縮短代碼量。
3.模擬實現strcpy函數
3.1.模擬實現
char* my_strcpy(char* str2,const char* str1)
{
char* first = str2;
assert(str2 && str1);//這里注意,盡量把assert放在char*
//first的下一行
//有的編譯器中若將assert放在最前面,可能無法編譯,因為C語言規定變量的常見必須放在代碼前面
while (*str2++ = *str1++)
{
;
}
return first;
}
int main(void)
{
char ch1[] = "abcde";
char ch2[] = "XXXXXXXXXXXX";
printf("%s\n", my_strcpy(ch2, ch1));//這里是鏈式訪問
//在一個函數里面去訪問另一個函數的值,就是鏈式訪問
}
分析總結:
1、盡量不要返回局部變量的地址。(因為局部變量在函數內部使用后:在出這個函數后,其局部變量的空間就會被銷毀,就不會再指向這個函數之前使用的地址了,所以就無法訪問到之前使用的地址,就會出現非法訪問內存的錯誤)。
2、指針不知道賦什么值的時候,就給NULL。
3、指針使用完后,就給NULL。
寫在后面
友友們,相聚的時刻總是短暫的,又到了說再見的時候啦~ 但是字符串這一塊經常在面試的時候會出模擬實現某某字符串函數的面試題,因此我們不能只會平時利用頭文件直接調用而不去摸清原理哈~ 要做到 摸清、拿捏、吃透 字符串函數。
以上代碼均可運行,所用編譯環境為 vs2019 ,運行時注意加上編譯頭文件#define _CRT_SECURE_NO_WARNINGS 1
原文鏈接:https://blog.csdn.net/m0_56817529/article/details/124072530
相關推薦
- 2022-08-29 GPU服務器的多用戶配置方法_服務器其它
- 2022-06-12 C語言實題講解快速掌握單鏈表上_C 語言
- 2022-11-03 C++中Covariant返回值類型詳解_C 語言
- 2022-03-21 SQL查詢連續登陸7天以上的用戶的方法實現_MsSql
- 2022-05-18 Python學習之異常中的finally使用詳解_python
- 2023-04-24 pandas常用表連接merge/concat/join/append詳解_python
- 2023-03-28 Go實現set類型的示例代碼_Golang
- 2024-02-01 QueryWrapper、LambdaQueryWrapper、QueryChainWrapper、
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支