日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

c字符串函数实现(1)---strncpy

發(fā)布時(shí)間:2025/3/13 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c字符串函数实现(1)---strncpy 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?

strncpy原型:char* strncpy(char* dest,const char* src,size_t count); 函數(shù)說(shuō)明:1、當(dāng)count <= strlen(src)+1(包括'\0')逐個(gè)將src中count個(gè)字符賦予dest,包括'\0'2、當(dāng)count > strlen(src)+1時(shí)將src字符(包括'\0')全部賦予dest,不夠的補(bǔ)'\0'賦予dest3、當(dāng)count的大小超過(guò)dest的存儲(chǔ)空間,則程序崩潰#include <iostream> #include <cstring> #include <cstddef> #include <assert.h> char* my_strncpy(char* dest,const char* src,size_t count); int main() {const char* src = "sch";char dest[] = "sdvnlskndvlsfghnd";int num = strlen(dest)+1;strncpy(dest,src,0);
for(int i=0;i<num;i++){if(dest[i])printf("%c",dest[i]);elseprintf("\\0");}printf("\n");return 0; } char* my_strncpy(char* dest,const char* src,size_t count) {assert(NULL!= dest && NULL!= src);char* pdest = dest;int num_src = 0 ;while(src[num_src++]!='\0');//num_src = strlen(src) + 1;if(count <= num_src){while(count--)*dest++ = *src++;}else{int temp = count - num_src;while(num_src--)*dest++ = *src++;while(temp--)*dest++ = '\0';}return pdest;}

總之一句話(huà),就是將src指向的字符賦予dest,不夠的在后面補(bǔ)'\0'。

不過(guò)strncpy在使用的時(shí)候有幾點(diǎn)很容易出錯(cuò)的地方:

1、如果dest的內(nèi)存空間不夠存放count個(gè)字節(jié)內(nèi)容,出現(xiàn)崩潰。

2、當(dāng)count個(gè)字符恰好將dest內(nèi)存占滿(mǎn)時(shí),也就是說(shuō),dest后面不會(huì)有‘\0’,此時(shí)用printf或者cout輸出字符串時(shí),會(huì)出現(xiàn)亂碼現(xiàn)象。

??? 所以一般來(lái)說(shuō),最好采用如下方式:

?? char fullname[MAX];

?? strncpy(fullname,s,MAX-1);

 fullname[MAX-1] = '\0';

???

?

轉(zhuǎn)載于:https://www.cnblogs.com/welsh-android-learning/archive/2013/04/27/3046737.html

總結(jié)

以上是生活随笔為你收集整理的c字符串函数实现(1)---strncpy的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。