C語言中strcpy()函數(shù)的具體實現(xiàn)及注意事項
一、strcpy()函數(shù)的簡介
strcpy()函數(shù):是將一個字符串復(fù)制到另一塊空間地址中 的函數(shù),‘\0’是停止拷貝的終止條件,同時也會將 '\0' 也復(fù)制到目標空間。下面是庫中的strcpy()函數(shù)聲明:
char* strcpy(char* destination,const char* source);
1. 函數(shù)的參數(shù):
- char* destination---------目標字符串的首地址
- const char* source------源地址:被復(fù)制的字符串的首地址,用const修飾,避免修改掉被拷貝的字符串
2.函數(shù)的返回值類型:
- char*:返回的是目標字符串的首地址
二、strcpy()函數(shù)的具體使用
場景一:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main()
{
char arr[10] = "########";
printf("%s\n", strcpy(arr,"hello"));
return 0;
}輸出的結(jié)果

場景二:
#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;
}輸出結(jié)果

三、使用strcpy()函數(shù)的注意事項
1.源字符必須以 '\0'結(jié)束:
#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字符數(shù)組所在的內(nèi)存空間后面存儲的內(nèi)容并不知道,不遇到 '\0' 拷貝就不會停止,這就會導(dǎo)致越界訪問,程序就會出現(xiàn)問題。
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;
}這里雖然拷貝成功并將結(jié)果輸出了,但程序卻崩潰了。目標空間太小,不足以放置拷貝的源字符串,會造成溢出的情況
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;
}這里的程序也出現(xiàn)了錯誤。str1指向的是常量字符串,是不可以被修改掉的,目標空間必須是可以被修改的,因為要將拷貝的字符串放在目標空間中。而源字符串可以是能夠修改的、也可以是不能修改的,因為strcpy函數(shù)的第二個參數(shù)已經(jīng)用const關(guān)鍵字修飾了,保證了拷貝過程中不會被修改。
補充:strcpy()的其它屬性
strcpy()的返回類型是char *,該函數(shù)返回的是一個字符的地址。
第一個參數(shù)不必指向數(shù)組的開始,這個特性可用于拷貝數(shù)組的一部分。
下面這個程序演示了將一個字符串拷貝到另一個字符數(shù)組的指定位置:
/*
* @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數(shù)組中that的第一個t
- 由于第一個參數(shù)是copy+7,所以ps指向copy中的第8個元素,因此puts(ps)從該處開始打印
具體如下:

總結(jié)
到此這篇關(guān)于C語言中strcpy()函數(shù)的具體實現(xiàn)及注意事項的文章就介紹到這了,更多相關(guān)C語言strcpy()函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 詳解C語言中strcpy()函數(shù)與strncpy()函數(shù)的使用
- C語言中的strdup()函數(shù)和其與strcpy()函數(shù)的區(qū)別
- C語言中字符串常用函數(shù)strcat與strcpy的用法介紹
- C語言 strcpy和memcpy區(qū)別詳細介紹
- C語言不使用strcpy函數(shù)如何實現(xiàn)字符串復(fù)制功能
- 徹底掌握C語言strcpy函數(shù)的用法
- 詳解c語言中的 strcpy和strncpy字符串函數(shù)使用
- C語言的strcpy函數(shù)你了解嗎
- C語言strcpy庫函數(shù)詳解
- C語言庫函數(shù)strcpy的使用及模擬實現(xiàn)
相關(guān)文章
C++ 中"priority_queue" 優(yōu)先級隊列實例詳解
這篇文章主要介紹了C++ 中"priority_queue" 優(yōu)先級隊列實例詳解的相關(guān)資料,需要的朋友可以參考下2017-04-04
深入理解c++中char*與wchar_t*與string以及wstring之間的相互轉(zhuǎn)換
本篇文章是對c++中的char*與wchar_t*與string以及wstring之間的相互轉(zhuǎn)換進行了詳細的分析介紹,需要的朋友參考下2013-05-05

