網站首頁 編程語言 正文
一、strcpy()函數的簡介
?strcpy()函數:是將一個字符串復制到另一塊空間地址中 的函數,‘\0’是停止拷貝的終止條件,同時也會將 '\0' 也復制到目標空間。下面是庫中的strcpy()函數聲明:
char* strcpy(char* destination,const char* source);
1. 函數的參數:
- char* destination---------目標字符串的首地址
- const char* source------源地址:被復制的字符串的首地址,用const修飾,避免修改掉被拷貝的字符串
2.函數的返回值類型:
- char*:返回的是目標字符串的首地址?
二、strcpy()函數的具體使用
場景一:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main()
{
char arr[10] = "########";
printf("%s\n", strcpy(arr,"hello"));
return 0;
}
?輸出的結果
場景二:?
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main()
{
char arr1[10] = "**********";
char arr2[10] = "abcd";
printf("%s\n", strcpy(arr1, arr2));
return 0;
}
輸出結果
三、使用strcpy()函數的注意事項
1.源字符必須以 '\0'結束:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main()
{
char arr1[10] = "**********";
char arr2[] = { 'a','b','c','d' };
printf("%s\n", strcpy(arr1,arr2));
return 0;
}
這里的代碼會出錯,'\0'是停止拷貝的終止條件,arr2字符數組所在的內存空間后面存儲的內容并不知道,不遇到 '\0' 拷貝就不會停止,這就會導致越界訪問,程序就會出現問題。
2.目標空間必須足夠大,以確保能放源字符串
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main()
{
char arr1[5] = "*****";
char arr2[] = "hello world";
printf("%s\n", strcpy(arr1,arr2));
return 0;
}
?這里雖然拷貝成功并將結果輸出了,但程序卻崩潰了。目標空間太小,不足以放置拷貝的源字符串,會造成溢出的情況
3.目標空間必須可變
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main()
{
char* str1 = "hello world";
char str2[10] = "*********";
printf("%s\n", strcpy(str1,str2));
return 0;
}
這里的程序也出現了錯誤。str1指向的是常量字符串,是不可以被修改掉的,目標空間必須是可以被修改的,因為要將拷貝的字符串放在目標空間中。而源字符串可以是能夠修改的、也可以是不能修改的,因為strcpy函數的第二個參數已經用const關鍵字修飾了,保證了拷貝過程中不會被修改。
補充:strcpy()的其它屬性
strcpy()的返回類型是char *,該函數返回的是一個字符的地址。
第一個參數不必指向數組的開始,這個特性可用于拷貝數組的一部分。
下面這個程序演示了將一個字符串拷貝到另一個字符數組的指定位置:
/*
* @Author: Your name
* @Date: 2020-02-24 14:35:13
* @Last Modified by: Your name
* @Last Modified time: 2020-02-24 15:26:57
*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define WORDS "beast"
#define SIZE 40
int main()
{
const char * orig = WORDS;
char copy[SIZE] = "Be the best that you can be.";
char * ps;
puts(orig);
puts(copy);
ps = strcpy(copy+7,orig);//ps==©[7],第八個元素的地址。
puts(copy);
puts(ps);
getchar();
return 0;
}
下面是該程序的輸出:
beast
Be the best that you can be.
Be the beast
beast
注意:
- strcpy()把源字符的空字符也拷貝進去
- 所以空字符覆蓋了copy數組中that的第一個t
- 由于第一個參數是copy+7,所以ps指向copy中的第8個元素,因此puts(ps)從該處開始打印
具體如下:
總結
原文鏈接:https://blog.csdn.net/weixin_47970952/article/details/126163736
相關推薦
- 2022-08-21 C語言數據結構之單鏈表的實現_C 語言
- 2022-10-06 Android?Activity啟動流程刨析_Android
- 2022-10-05 Android實現毛玻璃效果彈出菜單動畫_Android
- 2022-06-06 ?Redis?串行生成順序編碼的方法實現_Redis
- 2021-11-27 Linux開機自啟動服務兩種方式介紹_Linux
- 2022-11-03 python數據分析基礎知識之shape()函數的使用教程_python
- 2024-03-10 Spring 非自定義Bean注解
- 2022-06-04 Jenkins初級應用Publish?Over?SSH插件配置_安裝教程
- 最近更新
-
- 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同步修改后的遠程分支