sprintf、strcpy、strncpy及 memcpy 函数,请问这些函数功能有什么区别?配实例详解!

(1)sprintf:把格式化字符串写入某个字符串,对写入buffer的字符数没有限制,存在溢出可能;

(2)strcpy:把src开始以\0结尾的字符串复制到以dest为开始的地址空间,dest可能空间不够存放;

(3)strncpy:把src所指向的字符串中以src地址开始的前n个字节复制到dest所指的数组中,并返回dest,可以避免缓存不够,但是src大于dest时可能出现乱码,可以把dest末尾置空来避免;

(4)memcpy:从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中,src和dest有可能出现空间重叠,它可以复制任何内容;


sprintf:

int main()
{
    int ddd=666;
    char *buffer=NULL;    
    if((buffer = (char *)malloc(80*sizeof(char)))==NULL)
    {
        printf("malloc error\n");
    }
    sprintf(buffer, "The value of ddd = %d", ddd);//The value of ddd = 666
    printf("%s\n",buffer);
    free(buffer);
    buffer=NULL;
    return 0;
}

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);


输出结果为:coda
可能到这里你已经发现了一些问题,如果想把一个字符串的一部分复制到另一个字符串的某个位置,该怎么办呢,显然strcpy()函数是满足不了这个功能的,strncpy()函数是为了弥补strcpy()函数不能检查目标字符串是否容纳下源字符串的不足而设定的一个函数。并且完全可以实现这个功能。

memcpy:

作用:将s中的字符串复制到字符数组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;
}
输出结果:Golden Global View
example2
作用:将s中第13个字符开始的4个连续字符复制到d中。(从0开始)

#include<string.h>
int main(
{
    char* s="GoldenGlobalView";
    char d[20];
    memcpy(d,s+12,4);//从第13个字符(V)开始复制,连续复制4个字符(View)
    d[4]='\0';//memcpy(d,s+12*sizeof(char),4*sizeof(char));也可
    printf("%s",d);
   getchar();
   return 0;
}
输出结果: View

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

魏波.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值