最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言中strcpy()函數(shù)的具體實(shí)現(xiàn)及注意事項(xiàng)

 更新時(shí)間:2022年11月30日 11:14:59   作者:Candysrf  
C語言庫函數(shù)char *strcpy(char *dest, const char *src)把src所指向的字符串復(fù)制到dest,下面這篇文章主要給大家介紹了關(guān)于C語言中strcpy()函數(shù)的具體實(shí)現(xiàn)及注意事項(xiàng)的相關(guān)資料,需要的朋友可以參考下

一、strcpy()函數(shù)的簡介

 strcpy()函數(shù):是將一個(gè)字符串復(fù)制到另一塊空間地址中 的函數(shù),‘\0’是停止拷貝的終止條件,同時(shí)也會(huì)將 '\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ù)的注意事項(xiàng)

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;
}

這里的代碼會(huì)出錯(cuò),'\0'是停止拷貝的終止條件,arr2字符數(shù)組所在的內(nèi)存空間后面存儲(chǔ)的內(nèi)容并不知道,不遇到 '\0' 拷貝就不會(huì)停止,這就會(huì)導(dǎo)致越界訪問,程序就會(huì)出現(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)空間太小,不足以放置拷貝的源字符串,會(huì)造成溢出的情況

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)了錯(cuò)誤。str1指向的是常量字符串,是不可以被修改掉的,目標(biāo)空間必須是可以被修改的,因?yàn)橐獙⒖截惖淖址旁谀繕?biāo)空間中。而源字符串可以是能夠修改的、也可以是不能修改的,因?yàn)閟trcpy函數(shù)的第二個(gè)參數(shù)已經(jīng)用const關(guān)鍵字修飾了,保證了拷貝過程中不會(huì)被修改。

補(bǔ)充:strcpy()的其它屬性

strcpy()的返回類型是char *,該函數(shù)返回的是一個(gè)字符的地址。

第一個(gè)參數(shù)不必指向數(shù)組的開始,這個(gè)特性可用于拷貝數(shù)組的一部分。

下面這個(gè)程序演示了將一個(gè)字符串拷貝到另一個(gè)字符數(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==&copy[7],第八個(gè)元素的地址。
    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的第一個(gè)t
  • 由于第一個(gè)參數(shù)是copy+7,所以ps指向copy中的第8個(gè)元素,因此puts(ps)從該處開始打印

具體如下:

總結(jié)

到此這篇關(guān)于C語言中strcpy()函數(shù)的具體實(shí)現(xiàn)及注意事項(xiàng)的文章就介紹到這了,更多相關(guān)C語言strcpy()函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • OpenCV 圓與矩形識別的方法

    OpenCV 圓與矩形識別的方法

    這篇文章主要介紹了OpenCV 圓與矩形識別的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • C++面試八股文之左值與右值

    C++面試八股文之左值與右值

    簡單來說,左值就是可以使用&符號取地址的值,而右值一般不可以使用&符號取地址,這篇文章主要來和大家講講面試中左值與右值常考的知識點(diǎn),需要的可以參考一下
    2023-06-06
  • C++類的返回值是*this的成員函數(shù)問題

    C++類的返回值是*this的成員函數(shù)問題

    這篇文章主要介紹了C++類的返回值是*this的成員函數(shù)問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • C語言類的基本語法詳解

    C語言類的基本語法詳解

    大家好,本篇文章主要講的是C語言類的基本語法詳解,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • C語言控制臺(tái)繪制曲線的實(shí)現(xiàn)代碼

    C語言控制臺(tái)繪制曲線的實(shí)現(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了C語言控制臺(tái)繪制曲線的實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • C++中對象的動(dòng)態(tài)建立與釋放詳解及其作用介紹

    C++中對象的動(dòng)態(tài)建立與釋放詳解及其作用介紹

    這篇文章主要介紹了C++中對象的動(dòng)態(tài)建立與釋放詳解及其作用介紹,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • C++非遞歸遍歷磁盤文件和遞歸遍歷磁盤文件的程序示例

    C++非遞歸遍歷磁盤文件和遞歸遍歷磁盤文件的程序示例

    這篇文章主要介紹了C++非遞歸遍歷磁盤文件和遞歸遍歷磁盤文件的程序示例,大家可以參考使用二種方法
    2013-11-11
  • Qt編寫自定義控件實(shí)現(xiàn)抽獎(jiǎng)轉(zhuǎn)盤

    Qt編寫自定義控件實(shí)現(xiàn)抽獎(jiǎng)轉(zhuǎn)盤

    這篇文章主要為大家詳細(xì)介紹了Qt編寫自定義控件實(shí)現(xiàn)抽獎(jiǎng)轉(zhuǎn)盤,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • C語言中指針 int *p=0;和int *p;*p=0;和”&“的關(guān)系和區(qū)別詳解

    C語言中指針 int *p=0;和int *p;*p=0;和”&“的關(guān)系和區(qū)別詳解

    這篇文章主要介紹了C語言中指針 int *p=0;和int *p;*p=0;和”&“有什么關(guān)系和區(qū)別,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02
  • c++中l(wèi)og4cplus日志庫使用的基本步驟和示例代碼

    c++中l(wèi)og4cplus日志庫使用的基本步驟和示例代碼

    這篇文章主要給大家介紹了關(guān)于c++中l(wèi)og4cplus日志庫使用的相關(guān)資料,log4cplus是一款開源的c++日志庫,具有線程安全,靈活,以及多粒度控制的特點(diǎn),log4cplus可以將日志按照優(yōu)先級進(jìn)行劃分,使其可以面向程序的調(diào)試,運(yùn)行,測試,后期維護(hù)等軟件全生命周期,需要的朋友可以參考下
    2024-06-06

最新評論

山阳县| 湖南省| 宝清县| 五指山市| 黔南| 嫩江县| 平南县| 高青县| 衡南县| 公安县| 阳高县| 格尔木市| 张掖市| 龙州县| 乐清市| 普陀区| 扎兰屯市| 万山特区| 揭阳市| 宝应县| 邯郸市| 天峨县| 十堰市| 右玉县| 千阳县| 连江县| 民乐县| 安义县| 沛县| 湘潭市| 横山县| 丰都县| 安达市| 宜宾市| 五原县| 星子县| 宁明县| 女性| 即墨市| 开远市| 大丰市|