std::strcpy、strncpy、memset、memcpy用法

转载 2018年04月17日 17:37:28

转载自:https://blog.csdn.net/jin13277480598/article/details/53542209

1. std::strcpy

功能:将一个字符串复制到另一个字符串(如果字符串重叠,该行为是未定义);
定义于头文件 <cstring>

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

参数:

dest :指向复制内容存放的首地址
src :需要被复制的C风格的字符串
返回值 :复制后的字符串的首地址

Example:

/* strcpy example */
#include <iostream>
 #include <cstring>
 using namespace std;
  int main ()
  {
    char str1[]= "Sample string";
    char str2[40];
    char str3[40];
   strcpy (str2,str1);
   strcpy (str3,"copy successful");

   cout<<"str1:"<<str1<<endl;
   cout<<"str2:"<<str2<<endl;
   cout<<"str3:"<<str3<<endl;

   return 0;
 }

Output:

str1: Sample string
str2: Sample string
str3: copy successful

2.std::strncpy

定义于头文件<cstring>

char * strncpy ( char * destination, const char * source, size_t num );

功能:将一个字符串的一部分复制到另一个字符串;
说明:从原地址source开始,复制num个字符到dest开始的地址;

说明:从源地址source开始,复制num个字符到dest开始的地址

Example

C版:

    /* strncpy example */
#include <stdio.h>
#include <string.h>

int main ()
{
  char str1[]= "To be or not to be";
  char str2[40];
  char str3[40];

  /* copy to sized buffer (overflow safe): */
  strncpy ( str2, str1, sizeof(str2) );

  /* partial copy (only 5 chars): */
  strncpy ( str3, str2, 5 );
  str3[5] = '\0';  ** /* null character manually added */**

  puts (str1);
  puts (str2);
  puts (str3);

  return 0;
}

Output:

To be or not to be
To be or not to be
To be

C++:

#include <iostream>
#include <cstring>

int main()
{
    const char* src = "hi";
    char dest[6] = {'a', 'b', 'c', 'd', 'e', 'f'};;
    std::strncpy(dest, src, 5);
 //多出的用空字符填充
    std::cout << "The contents of dest are: ";
    for (char c : dest) {
        if (c) {
            std::cout << c << ' ';
        } else {
            std::cout << "\\0" << ' ';
        }
    }
    std::cout << '\n';
    return 0;
}
output:

The contents of dest are: h i \0 \0 \0 f

3.std::memcpy

定义于头文件 <cstring>

void * memcpy ( void * destination, const void * source, size_t num );

功能:将一个缓冲区复制到另一个缓冲区;

Example

#include <iostream>
#include <cstring>

int main()
{
    char source[] = "once upon a midnight dreary...";
    char dest[4];
    std::memcpy(dest, source, sizeof dest);
    for (char c : dest) {
        std::cout << c << '\n';
    }
    return 0;
} 

output:
o
n
c
e

4.std::memset

定义于头文件 <cstring>

void * memset ( void * ptr, int value, size_t num );

功能:将指针ptr所指向的内存空间开始的num个内存单元设置成value的值;

参数:

ptr:指向要设置值的内存块

value:要填充的值

num:要填充的大小

C:

/* memset example */
#include <stdio.h>
#include <string.h>

int main ()
{
  char str[] = "almost every programmer should know memset!";
  memset (str,'-',6);
  puts (str);
  return 0;
}

Output:

—— every programmer should know memset!

C++版:

#include <iostream>
#include <cstring>

int main()
{
    int a[20];
    std::memset(a, 0, sizeof(a));
    std::cout << "a[0] = " << a[0] << '\n';
    return 0;
}
output:
a[0]=0

memcmp,memcpy,memmove,memset,strcat,strcmp,strcpy,strlen 8个函数的实现

为区别库函数,函数名首字母大写。 Memcmp函数: //内存区域内容比较函数 int Memcmp(const void *buf1,const void *buf2,unsigne...
  • ms347397173
  • ms347397173
  • 2015-11-30 22:44:18
  • 471

C/C++ memset的作用以及memcpy和strcpy的区别

参考:http://baike.baidu.com/link?url=LyptIIh9GOU0RUvnyyhKk1X8fW6V8iRWqvTe-qIPNvNQrya0eDKvugmxWo5p7juyd...
  • u012005313
  • u012005313
  • 2015-08-26 17:04:26
  • 1478

strcpy与memcpy以及strncpy

1. strcpy函数   strcpy提供了字符串的复制。即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符。   函数原型及实现:char* strcpy(cha...
  • gogor
  • gogor
  • 2009-09-02 15:06:00
  • 6658

memcpy手写实现

memcpy手写实现: void *Memcpy(void *dst, const void *src, size_t size) { if (dst == NULL || src == NULL...
  • suky520
  • suky520
  • 2014-09-28 12:45:54
  • 802

strcpy,memset,memcpy三者之间的根本区别

1.strcpy的用法    strcpy的作用是拷贝字符串,当它遇到'\0'时结束拷贝,原型为:extern char *strcpy(char *dest,char *src); ...
  • educast
  • educast
  • 2013-10-23 13:15:00
  • 1483

STRCPY,MEMSET,MEMCPY三者的区别

memset用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为‘ 或‘/0;例:char a[100];memset(a, /0, sizeof(a)); memcpy用来做内存...
  • yuwei19840916
  • yuwei19840916
  • 2008-11-18 14:40:00
  • 538

strcpy、memcpy和memset的区别

strcpy 原型:extern char *strcpy(char *dest,char *src); 用法:#include 功能:把src所指由NULL结束的字符串复制到dest所指的数组中...
  • cnxxrj
  • cnxxrj
  • 2015-06-02 08:33:01
  • 1926

内存重叠之strcpy/strncpy/strcat/strncat和memcpy---我又踩到地雷了

前面, 我们说过, strcpy是一个非常不安全的函数, 如果大家在项目中
  • stpeace
  • stpeace
  • 2014-09-21 23:03:36
  • 6847

strcpy,strncpy,memcpy的源码分析

首先讲讲strcpy的源码,它是三者中最简单的,但是确实最为精辟的 char * __cdecl strcpy(char * dst, const char * src) {      ...
  • u010388846
  • u010388846
  • 2013-08-06 17:27:20
  • 702

strcpy、strncpy与memcpy strchr 和 strstr的区别与使用方法

strcpy、strncpy与memcpy的区别与使用方法 strcpy、strncpy、memcpy这三个C语言函数我们在主机代码编写中会很频繁的使用到,但是三个函数的区别、使用时该注意什么还是有...
  • Waltering
  • Waltering
  • 2015-01-22 17:02:09
  • 546
收藏助手
不良信息举报
您举报文章:std::strcpy、strncpy、memset、memcpy用法
举报原因:
原因补充:

(最多只允许输入30个字)