c字符串函数实现(1)---strncpy
生活随笔
收集整理的這篇文章主要介紹了
c字符串函数实现(1)---strncpy
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
?
strncpy原型:char* strncpy(char* dest,const char* src,size_t count); 函數(shù)說明:1、當(dāng)count <= strlen(src)+1(包括'\0')逐個將src中count個字符賦予dest,包括'\0'2、當(dāng)count > strlen(src)+1時將src字符(包括'\0')全部賦予dest,不夠的補'\0'賦予dest3、當(dāng)count的大小超過dest的存儲空間,則程序崩潰#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;}
總之一句話,就是將src指向的字符賦予dest,不夠的在后面補'\0'。
不過strncpy在使用的時候有幾點很容易出錯的地方:
1、如果dest的內(nèi)存空間不夠存放count個字節(jié)內(nèi)容,出現(xiàn)崩潰。
2、當(dāng)count個字符恰好將dest內(nèi)存占滿時,也就是說,dest后面不會有‘\0’,此時用printf或者cout輸出字符串時,會出現(xiàn)亂碼現(xiàn)象。
??? 所以一般來說,最好采用如下方式:
?? 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的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mvc3分页封装
- 下一篇: jQuery源码学习第二天--jQuer