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

C語言的strcpy函數(shù)你了解嗎

 更新時間:2022年03月22日 10:26:42   作者:威威沁沁  
這篇文章主要為大家詳細(xì)介紹了C語言的strcpy函數(shù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

strcpy

拷貝字符串到目標(biāo)地址

函數(shù)原型

char *strcpy( char * destination, const char * source )

參數(shù)講解

參數(shù)destinationsource
解釋目標(biāo)字符串地址以 Null 結(jié)尾的源字符串地址

返回值詳解

這些函數(shù)中的每一個都返回目標(biāo)字符串,沒有返回值就是拷貝失敗。

函數(shù)詳解

strcpy使用時幾個注意點(diǎn)

 第一個注意點(diǎn):源字符串必須以‘\0’結(jié)束,同時會將源字符串中的‘\0’拷貝到目標(biāo)空間。

就是說當(dāng)我們把源字符串拷貝到目標(biāo)地址時什么時候停止呢,就是當(dāng)把源字符串中的‘\0’也拷貝過去時結(jié)束。

用以下代碼為例,就是說當(dāng)arr2中f拷貝到arr1中時,strcpy還會把a(bǔ)rr2中的‘\0’拷貝到arr1中

#include<stdio.h>
#include<string.h>
int main()
{
	char arr1[8];
	char arr2[] = "abcdef";
 
	strcpy(arr1, arr2);
 
	printf("%s\n", arr1);
	return 0;
}

 而如果arr2中沒有‘\0’時,看如下圖片所示,strcpy會越界訪問直到程序崩潰!

 而當(dāng)給arr2中添加'\0'時,程序就很容易就編譯過去了 

所以在源地址中一定要存在'\0'

第二個注意點(diǎn):目標(biāo)空間必須足夠大,以確保能存放源字符串

假如我們把a(bǔ)rr2中的七個字符拷貝到arr1中去,遺憾的是arr1只有四個空間不夠大,這時我們還調(diào)用strcpy,就會發(fā)現(xiàn)程序崩了!

 為什么程序會崩了呢?原因很簡單,就是‘裝不下’,arr1的??臻g被破壞了。

而作為程序員的我們,必須保證目標(biāo)空間足夠大,strcpy本身是不考慮這些問題的(很滑稽是不是,有一種你叫我干啥我干啥,出事了還怪我嘍的味道)

第三個注意點(diǎn):目標(biāo)空間必須可變

例如下面這個代碼,arr1指向"qwertyuiop"(這個字符串足夠長吧),現(xiàn)在要求把a(bǔ)rr2中的字符串拷貝到arr1中去,大家覺得結(jié)果會是什么?

#include<stdio.h>
#include<string.h>
int main()
{
	char* arr1 = "qwertyuiop";
	char arr2[] = "abcedf";
	strcpy(arr1, arr2);
 
	printf("%s", arr1);
	return 0;
}

看到這想必大家心理應(yīng)該都有答案了,調(diào)試一下發(fā)現(xiàn)程序又崩了!這是為什么呢?

 就是因?yàn)閍rr1指向的是常量字符串,常量是不可修改的。如果非要寫成代碼去修改它,抱歉只能報錯了。所以大家使用strcpy是目的地必須是可修改的。

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!    

相關(guān)文章

  • C語言中qsort函數(shù)用法實(shí)例小結(jié)

    C語言中qsort函數(shù)用法實(shí)例小結(jié)

    這篇文章主要介紹了C語言中qsort函數(shù)用法,包括了針對各種數(shù)據(jù)類型參數(shù)的排序,非常具有實(shí)用價值,需要的朋友可以參考下
    2014-09-09
  • Qt 實(shí)現(xiàn)桌面雪花飄落代碼

    Qt 實(shí)現(xiàn)桌面雪花飄落代碼

    這篇文章主要介紹了Qt實(shí)現(xiàn)桌面雪花飄落代碼,有需要的朋友可以參考一下
    2013-12-12
  • 基于MFC實(shí)現(xiàn)自定義復(fù)選框效果

    基于MFC實(shí)現(xiàn)自定義復(fù)選框效果

    復(fù)選框是一種可同時選中多項(xiàng)的基礎(chǔ)控件,主要是有兩種明顯的狀態(tài):選中與非選中。本文將通過MFC框架實(shí)現(xiàn)自定義復(fù)選框效果,感興趣的可以了解一下
    2022-02-02
  • C++實(shí)例代碼詳解友元函數(shù)

    C++實(shí)例代碼詳解友元函數(shù)

    采用類的機(jī)制后實(shí)現(xiàn)了數(shù)據(jù)的隱藏與封裝,類的數(shù)據(jù)成員一般定義為私有成員,成員函數(shù)一般定義為公有的,依此提供類與外界間的通信接口。但是,有時需要定義一些函數(shù),這些函數(shù)不是類的一部分,但又需要頻繁地訪問類的數(shù)據(jù)成員,這時可以將這些函數(shù)定義為該類的友元函數(shù)
    2022-06-06
  • c語言通過棧判斷括號匹配是否配對

    c語言通過棧判斷括號匹配是否配對

    前面實(shí)現(xiàn)了棧的基本數(shù)據(jù)結(jié)構(gòu),這里來做一個聯(lián)系,用棧來解決一道比較常見的算法題,就是括號配對是否滿足規(guī)則,文中有相關(guān)的代碼示例供大家參考,需要的朋友可以參考下
    2023-09-09
  • C++超詳細(xì)分析順序表

    C++超詳細(xì)分析順序表

    程序中經(jīng)常需要將一組數(shù)據(jù)元素作為整體管理和使用,需要創(chuàng)建這種元素組,用變量記錄它們,傳進(jìn)傳出函數(shù)等。一組數(shù)據(jù)中包含的元素個數(shù)可能發(fā)生變化,順序表則是將元素順序地存放在一塊連續(xù)的存儲區(qū)里,元素間的順序關(guān)系由它們的存儲順序自然表示
    2022-03-03
  • C語言實(shí)現(xiàn)貪吃蛇游戲(單人版)

    C語言實(shí)現(xiàn)貪吃蛇游戲(單人版)

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)貪吃蛇游戲單人版,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • 淺析VSCode launch.json中的各種替換變量的意思 ${workspaceFolder} ${file} ${fileBasename} ${fileDirname}等

    淺析VSCode launch.json中的各種替換變量的意思 ${workspaceFolder} ${file} $

    這篇文章主要介紹了VSCode launch.json中的各種替換變量的意思 ${workspaceFolder} ${file} ${fileBasename} ${fileDirname}等,非常不錯具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • C++中函數(shù)的默認(rèn)參數(shù)詳細(xì)解析

    C++中函數(shù)的默認(rèn)參數(shù)詳細(xì)解析

    在函數(shù)聲明或定義時,直接對參數(shù)賦值,該參數(shù)就是默認(rèn)參數(shù)。在函數(shù)調(diào)用時,省略部分或全部參數(shù),這時就會使用默認(rèn)參數(shù)進(jìn)行代替
    2013-10-10
  • C++11中移動構(gòu)造函數(shù)案例代碼

    C++11中移動構(gòu)造函數(shù)案例代碼

    C++11 標(biāo)準(zhǔn)中為了滿足用戶使用左值初始化同類對象時也通過移動構(gòu)造函數(shù)完成的需求,新引入了 std::move() 函數(shù),它可以將左值強(qiáng)制轉(zhuǎn)換成對應(yīng)的右值,由此便可以使用移動構(gòu)造函數(shù),對C++11移動構(gòu)造函數(shù)相關(guān)知識感興趣的朋友一起看看吧
    2023-01-01

最新評論