1.strcpy()函数
原型声明:char *strcpy(char* dest, const char *src);
头文件:#include <string.h> 和 #include <stdio.h>
功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间
说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。返回指向dest的指针。
char a[],b[]={"COPY"};//定义字符数组a,b
strcpy(a,b);//将b中的COPY复制到a中
2.strncpy()函数
函数原型char *strncpy(char *dest,char *src,int size_t n);
功能:(c/c++)复制字符串src中的内容(字符,数字、汉字....)到字符串dest中,复制多少由size_t n的值决定。如果src的前n个字符不含NULL字符,则结果不会以NULL字符结束。如果n<src的长度,只是将src的前n个字符复制到dest的前n个字符,不自动添加'\0',也就是结果dest不包括'\0',需要再手动添加一个'\0'。如果src的长度小于n个字节,则以NULL填充dest直到复制完n个字节。src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符长度+'\0'。
#include<stdio.h>
#include<string.h>
int main(){
char name[]={"Chinanet"},dest[20]={};
strncpy(dest,name,3);
printf("%s\n",dest);
}
功能概括:简而言之,就是把src指向的字符串的前size_t n个字符(不包括\0,\0得自己手动加在*dest被复制之后)复制到dest指向的字符串中。如果要复制的*src的部分有\0,就把\0复制进去,之后就提前结束,即使没复制到第size_t n个字符也是。返回指向*dest的指针。
3.strcpy_s()函数
strcpy函数,就象gets函数一样,它没有方法来保证有效的缓冲区尺寸,所以它只能假定缓冲足够大来容纳要拷贝的字符串。在程序运行时,这将导致不可预料的行为。用strcpy_s就可以避免这些不可预料的行为。这个函数用两个参数、三个参数都可以,只要可以保证缓冲区大小。
三个参数时:
errno_t strcpy_s( char *strDestination, size_t numberOfElements, const char *strSource );
两个参数时:
errno_t strcpy_s( char (&strDestination)[size], const char *strSource ); // C++ only
#include "stdafx.h"
#include<iostream>
#include<string.h>
using namespace std;
void Test(void)
{
char *str1=NULL;
str1=new char[20];
char str[7];
strcpy_s(str1,20,"hello world");//三个参数
strcpy_s(str,"hello");//两个参数但如果:char *str=new char[7];会出错:提示不支持两个参数
cout<<"strlen(str1)"<<strlen(str1)<<"strlen(str)"<<strlen(str)<<endl;
printf(str1);printf("\n");
cout<<str<<endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
Test();
return 0;
}