sprintf、strcpy、strncpy及 memcpy 函数,请问这些函数功能有什么区别?配实例详解!
?
(1)sprintf:把格式化字符串寫入某個字符串,對寫入buffer的字符數(shù)沒有限制,存在溢出可能;
(2)strcpy:把src開始以\0結(jié)尾的字符串復(fù)制到以dest為開始的地址空間,dest可能空間不夠存放;
(3)strncpy:把src所指向的字符串中以src地址開始的前n個字節(jié)復(fù)制到dest所指的數(shù)組中,并返回dest,可以避免緩存不夠,但是src大于dest時可能出現(xiàn)亂碼,可以把dest末尾置空來避免;
(4)memcpy:從源src所指的內(nèi)存地址的起始位置開始拷貝n個字節(jié)到目標(biāo)dest所指的內(nèi)存地址的起始位置中,src和dest有可能出現(xiàn)空間重疊,它可以復(fù)制任何內(nèi)容;
sprintf:
strcpy:
void main() {char a[20],c[]="i am teacher!";strcpy(a,c);cout<<a<<endl; } ? ? ? char *a="coda";char b[MAX]="you are the best one.";char *p;p=strcpy(b+8,a);puts(p);
輸出結(jié)果為:coda
可能到這里你已經(jīng)發(fā)現(xiàn)了一些問題,如果想把一個字符串的一部分復(fù)制到另一個字符串的某個位置,該怎么辦呢,顯然strcpy()函數(shù)是滿足不了這個功能的,strncpy()函數(shù)是為了彌補(bǔ)strcpy()函數(shù)不能檢查目標(biāo)字符串是否容納下源字符串的不足而設(shè)定的一個函數(shù)。并且完全可以實現(xiàn)這個功能。
memcpy:
作用:將s中的字符串復(fù)制到字符數(shù)組d中。 //memcpy.c #include <stdio.h> #include <string.h> int main() {char* s="GoldenGlobalView";char d[20];clrscr();memcpy(d,s,(strlen(s)+1));printf("%s",d);getchar();return 0; } 輸出結(jié)果:Golden Global View example2 作用:將s中第13個字符開始的4個連續(xù)字符復(fù)制到d中。(從0開始)#include<string.h> int main( {char* s="GoldenGlobalView";char d[20];memcpy(d,s+12,4);//從第13個字符(V)開始復(fù)制,連續(xù)復(fù)制4個字符(View)d[4]='\0';//memcpy(d,s+12*sizeof(char),4*sizeof(char));也可printf("%s",d);getchar();return 0; } 輸出結(jié)果: View?
總結(jié)
以上是生活随笔為你收集整理的sprintf、strcpy、strncpy及 memcpy 函数,请问这些函数功能有什么区别?配实例详解!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 线程A向队列Q中不停写入数据,线程B从列
- 下一篇: 深入理解TCP/IP协议族