欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2022年11月30日 11:14:59   作者:Candysrf  
C語言庫函數(shù)char *strcpy(char *dest, const char *src)把src所指向的字符串復(fù)制到dest,下面這篇文章主要給大家介紹了關(guān)于C語言中strcpy()函數(shù)的具體實現(xiàn)及注意事項的相關(guā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==&copy[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)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一文教你快速了解C語言中的作用域和常量

    一文教你快速了解C語言中的作用域和常量

    作用域(scope)是程序設(shè)計概念,通常來說一段程序代碼中所用到的名字并不總是有效/可用,下面這篇文章主要給大家介紹了關(guān)于如何快速了解C語言中的作用域和常量的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • C++默認(rèn)參數(shù)與函數(shù)重載及注意事項

    C++默認(rèn)參數(shù)與函數(shù)重載及注意事項

    這篇文章主要介紹了C++默認(rèn)參數(shù)與函數(shù)重載及注意事項包括語法與使用,通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值 ,需要的朋友可以參考下
    2020-03-03
  • C++ 中

    C++ 中"priority_queue" 優(yōu)先級隊列實例詳解

    這篇文章主要介紹了C++ 中"priority_queue" 優(yōu)先級隊列實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • 解析C語言與C++的編譯模型

    解析C語言與C++的編譯模型

    C++繼承了C的編譯模型,C語言的編譯鏈接模型相對簡潔,但C++繼承了這些機制之后變得更加復(fù)雜難以理解,這里就來帶大家簡要解析C語言與C++的編譯模型
    2016-05-05
  • C++中static修飾符的詳解及其作用介紹

    C++中static修飾符的詳解及其作用介紹

    這篇文章主要介紹了C++中static修飾符的詳解及其作用介紹,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • C++單例設(shè)計模式詳細(xì)講解

    C++單例設(shè)計模式詳細(xì)講解

    單例模式(Singleton Pattern)是最簡單的設(shè)計模式之一。這種類型的設(shè)計模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對象的最佳方式,這種模式涉及到一個單一的類,該類負(fù)責(zé)創(chuàng)建自己的對象,同時確保只有單個對象被創(chuàng)建
    2022-06-06
  • 深入理解c++中char*與wchar_t*與string以及wstring之間的相互轉(zhuǎn)換

    深入理解c++中char*與wchar_t*與string以及wstring之間的相互轉(zhuǎn)換

    本篇文章是對c++中的char*與wchar_t*與string以及wstring之間的相互轉(zhuǎn)換進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C++如何用智能指針管理內(nèi)存資源

    C++如何用智能指針管理內(nèi)存資源

    這篇文章主要介紹了C++如何用智能指針管理內(nèi)存資源,幫助大家更好的理解和使用c++開發(fā),感興趣的朋友可以了解下
    2020-08-08
  • VC取得任務(wù)欄高度的方法

    VC取得任務(wù)欄高度的方法

    這篇文章主要介紹了VC取得任務(wù)欄高度的方法,需要的朋友可以參考下
    2014-07-07
  • C語言簡易版flappy bird小游戲

    C語言簡易版flappy bird小游戲

    這篇文章主要為大家詳細(xì)介紹了C語言簡易版flappy bird小游戲,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12

最新評論