C語言中strcpy()函數(shù)的具體實現(xiàn)及注意事項
一、strcpy()函數(shù)的簡介
strcpy()函數(shù):是將一個字符串復(fù)制到另一塊空間地址中 的函數(shù),‘\0’是停止拷貝的終止條件,同時也會將 '\0' 也復(fù)制到目標(biāo)空間。下面是庫中的strcpy()函數(shù)聲明:
char* strcpy(char* destination,const char* source);
1. 函數(shù)的參數(shù):
- char* destination---------目標(biāo)字符串的首地址
- const char* source------源地址:被復(fù)制的字符串的首地址,用const修飾,避免修改掉被拷貝的字符串
2.函數(shù)的返回值類型:
- char*:返回的是目標(biāo)字符串的首地址
二、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.目標(biāo)空間必須足夠大,以確保能放源字符串
#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é)果輸出了,但程序卻崩潰了。目標(biāo)空間太小,不足以放置拷貝的源字符串,會造成溢出的情況
3.目標(biāo)空間必須可變
#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指向的是常量字符串,是不可以被修改掉的,目標(biāo)空間必須是可以被修改的,因為要將拷貝的字符串放在目標(biāo)空間中。而源字符串可以是能夠修改的、也可以是不能修改的,因為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()把源字符的空字符也拷貝進(jìn)去
- 所以空字符覆蓋了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ū)別詳細(xì)介紹
- 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++默認(rèn)參數(shù)與函數(shù)重載及注意事項
這篇文章主要介紹了C++默認(rèn)參數(shù)與函數(shù)重載及注意事項包括語法與使用,通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值 ,需要的朋友可以參考下2020-03-03C++ 中"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)換進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05