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

詳解C語(yǔ)言中strcpy()函數(shù)與strncpy()函數(shù)的使用

 更新時(shí)間:2015年08月24日 10:55:54   投稿:goldensun  
這篇文章主要介紹了詳解C語(yǔ)言中strcpy()函數(shù)與strncpy()函數(shù)的使用,是C語(yǔ)言入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下

C語(yǔ)言strcpy()函數(shù):復(fù)制字符串

頭文件:#include <string.h>

定義函數(shù):

char *strcpy(char *dest, const char *src);

函數(shù)說(shuō)明:strcpy()會(huì)將參數(shù)src 字符串拷貝至參數(shù)dest 所指的地址。

返回值:返回參數(shù)dest 的字符串起始地址。

附加說(shuō)明:如果參數(shù) dest 所指的內(nèi)存空間不夠大,可能會(huì)造成緩沖溢出(buffer Overflow)的錯(cuò)誤情況,在編寫(xiě)程序時(shí)請(qǐng)?zhí)貏e留意,或者用strncpy()來(lái)取代。

范例

#include <string.h>
main(){
 char a[30] = "string(1)";
 char b[] = "string(2)";
 printf("before strcpy() :%s\n", a);
 printf("after strcpy() :%s\n", strcpy(a, b));
}

執(zhí)行結(jié)果:

before strcpy() :string(1)
after strcpy() :string(2)

C語(yǔ)言strncpy()函數(shù):復(fù)制字符串的前n個(gè)字符

頭文件:#include <string.h>

strncpy()用來(lái)復(fù)制字符串的前n個(gè)字符,其原型為:
 

 char * strncpy(char *dest, const char *src, size_t n);

【參數(shù)說(shuō)明】dest 為目標(biāo)字符串指針,src 為源字符串指針。

strncpy()會(huì)將字符串src前n個(gè)字符拷貝到字符串dest。

不像strcpy(),strncpy()不會(huì)向dest追加結(jié)束標(biāo)記'\0',這就引發(fā)了很多不合常理的問(wèn)題,將在下面的示例中說(shuō)明。

注意:src 和 dest 所指的內(nèi)存區(qū)域不能重疊,且 dest 必須有足夠的空間放置n個(gè)字符。

【返回值】返回字符串dest。

【函數(shù)示例】拷貝4組字符串。

#include<stdio.h>
#include<string.h>
int main(void){
 char dest1[20];
 char src1[] = "abc";
 int n1 = 3;
 char dest2[20]="********************";
 char src2[] = "abcxyz";
 int n2 = strlen(src2)+1;
 char dest3[100] = "http://see.xidian.edu.cn/cpp/shell/";
 char src3[6] = "abcxyz"; // 沒(méi)有'\0'
 int n3 = 20;
 char dest4[100] = "http://see.xidian.edu.cn/cpp/u/yuanma/";
 char src4[] = "abc\0defghigk";
 int n4 = strlen(src3);
 strncpy(dest1, src1, n1); // n1小于strlen(str1)+1,不會(huì)追加'\0'
 strncpy(dest2, src2, n2); // n2等于strlen(str2)+1,恰好可以把src2末尾的'\0'拷貝到dest2
 strncpy(dest3, src3, n3); // n3大于strlen(str3)+1,循環(huán)拷貝str3
 strncpy(dest4, src4, n4); // src4中間出現(xiàn)'\0'
 printf("dest1=%s\n", dest1);
 printf("dest2=%s, dest2[15]=%c\n", dest2, dest2[10]);
 printf("dest3=%s\n", dest3);
 printf("dest4=%s, dest4[6]=%d, dest4[20]=%d, dest4[90]=%d\n", dest4, dest4[6], dest4[20], dest4[90]);
 return 0;
}

VC6.0運(yùn)行結(jié)果:

MinGW運(yùn)行結(jié)果:

從上面的運(yùn)行結(jié)果可以看出,strncpy()很難掌控,行為詭異。使用strncpy()最安全方式是使n等于strlen(src)+1,即拷貝整個(gè)字符串,同時(shí)將'\0'追加到dest。但這又與strcmp()的作用沒(méi)有什么兩樣。

相關(guān)文章

  • C語(yǔ)言switch 語(yǔ)句的用法詳解

    C語(yǔ)言switch 語(yǔ)句的用法詳解

    本文主要介紹C 語(yǔ)言中的switch 語(yǔ)句,這里提供示例代碼和詳細(xì)介紹,希望能幫助學(xué)習(xí)C語(yǔ)言的小伙伴
    2016-07-07
  • 深入解讀C++ 內(nèi)聯(lián)函數(shù)inline|nullptr

    深入解讀C++ 內(nèi)聯(lián)函數(shù)inline|nullptr

    內(nèi)聯(lián)函數(shù):用** inline 修飾的函數(shù)叫做內(nèi)聯(lián)函數(shù),編譯時(shí)C++編譯器會(huì)在調(diào)用的地方展開(kāi)內(nèi)聯(lián)函數(shù)**,這樣調(diào)用內(nèi)聯(lián)函數(shù)就需要?jiǎng)?chuàng)建棧楨,就提高效率了,這篇文章給大家介紹C++ 內(nèi)聯(lián)函數(shù)inline|nullptr的相關(guān)知識(shí),感興趣的朋友跟隨小編一起看看吧
    2024-07-07
  • C++?路徑中./、../、/代表的含義

    C++?路徑中./、../、/代表的含義

    這篇文章主要介紹了C++?路徑中./、../、/代表的含義,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • 一篇文章帶你實(shí)現(xiàn)C語(yǔ)言中常用庫(kù)函數(shù)的模擬

    一篇文章帶你實(shí)現(xiàn)C語(yǔ)言中常用庫(kù)函數(shù)的模擬

    這篇文章主要介紹了C語(yǔ)言中常用庫(kù)函數(shù)的模擬,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • C++數(shù)位DP復(fù)雜度統(tǒng)計(jì)數(shù)字問(wèn)題示例詳解

    C++數(shù)位DP復(fù)雜度統(tǒng)計(jì)數(shù)字問(wèn)題示例詳解

    這篇文章主要為大家介紹了利用C++數(shù)位DP的復(fù)雜度來(lái)統(tǒng)計(jì)數(shù)字問(wèn)題的示例實(shí)現(xiàn)過(guò)程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升值加薪
    2021-11-11
  • C語(yǔ)言實(shí)現(xiàn)數(shù)組的循環(huán)移位的方法示例

    C語(yǔ)言實(shí)現(xiàn)數(shù)組的循環(huán)移位的方法示例

    這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)數(shù)組的循環(huán)移位的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • 詳解C++實(shí)現(xiàn)線(xiàn)程安全的單例模式

    詳解C++實(shí)現(xiàn)線(xiàn)程安全的單例模式

    這篇文章主要介紹了C++實(shí)現(xiàn)線(xiàn)程安全的單例模式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • C語(yǔ)言 深入講解條件編譯的用處

    C語(yǔ)言 深入講解條件編譯的用處

    C語(yǔ)言提供了條件編譯的語(yǔ)法,就是在編譯源碼的時(shí)候,可以選擇性地編譯指定的代碼。例如我們開(kāi)發(fā)一個(gè)兼容windows系統(tǒng)和linux系統(tǒng)運(yùn)行的項(xiàng)目,那么,一些與操作系統(tǒng)密切相關(guān)的代碼,就需要進(jìn)行選擇性編譯
    2022-04-04
  • wince程序防止創(chuàng)建多個(gè)實(shí)例實(shí)現(xiàn)互斥作用

    wince程序防止創(chuàng)建多個(gè)實(shí)例實(shí)現(xiàn)互斥作用

    什么時(shí)候用的互斥?當(dāng)你的程序只允許同時(shí)打開(kāi)一個(gè)的時(shí)候,就可以通過(guò)互斥來(lái)實(shí)現(xiàn),下面說(shuō)的互斥,主要是針對(duì)防止程序創(chuàng)建多個(gè)實(shí)例這種情況來(lái)實(shí)現(xiàn)的
    2014-02-02
  • C++ 學(xué)習(xí)之旅三 我和超級(jí)瑪麗有個(gè)約會(huì)

    C++ 學(xué)習(xí)之旅三 我和超級(jí)瑪麗有個(gè)約會(huì)

    學(xué)習(xí)了c++有一周有余了吧,感謝孫鑫老師的視頻教程,讓我   對(duì)C++有了基本的了解,并理解到C++與.net 的許許多多的區(qū)別,更要感謝網(wǎng)民為programaking的人,會(huì)為我提供了超級(jí)瑪麗制作揭秘 這套寶貴的教程,讓我 做做出了這個(gè)項(xiàng)目,對(duì)c++ 有了一個(gè)更深層次的認(rèn)識(shí)
    2012-11-11

最新評(píng)論

尉氏县| 高邮市| 肇东市| 姚安县| 桦南县| 秦皇岛市| 赤峰市| 肇东市| 沙田区| 台南市| 勐海县| 乐业县| 海城市| 博白县| 乡宁县| 大足县| 桂林市| 利辛县| 临城县| 商水县| 陇西县| 南召县| 威信县| 罗山县| 嵩明县| 达拉特旗| 竹山县| 静宁县| 晋江市| 武汉市| 嘉黎县| 巩留县| 清徐县| 荥阳市| 武冈市| 南丹县| 兴仁县| 衡水市| 文成县| 沂水县| 郎溪县|