C++ 请问strcpy 和 strcpy_s的区别 是什么

作者&投稿:裘旭 (若有异议请与网页底部的电邮联系)
c++strcpy 和 是strncpy区别~

Strcpy和Strncpy的区别
第一种情况:  
char* p="how are you ?";  char name[20]="ABCDEFGHIJKLMNOPQRS";  strcpy(name,p); //name改变为"how are you ? "====>正确!  strncpy(name,p, sizeof(name));//name改变为"how are you ?" =====>正确!后续的字符将置为NULL  
第二种情况:  
char* p="how are you ?";  
char name[10];  
strcpy(name,p); //目标串长度小于源串,错误!  
name[sizeof(name)-1]='\0'; //和上一步组合,弥补结果,但是这种做法并不可取,因为上一步出错处理方式并不确定  
strncpy(name,p,sizeof(name)); //源串长度大于指定拷贝的长度sizeof(name),注意在这种情况下不会自动在目标串后面加'\0'  name[sizeof(name)-1]='\0'; //和上一步组合,弥补结果

strcpy_s函数有3个参数,第2个是要复制的长度,
strcpy_s(s,name)在S和NAME中间添加要复制的长度。
strcpy_s是微软为了安全性考虑自己添加的函数,和strcpy不同。

  • strcpy_s和strcpy函数的功能几乎是一样的。

  • 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



strcpy_s是VS后续版本中微软新推出的更安全的函数。
strcpy之所以不安全是因为它需要程序员保证输出buffer不会越界。

strcpy 如果使用不当会造成内存越界,比如向目标缓冲区中拷贝超过缓冲区长度的串。
用strcpy_s 代替strcpy可以防止出现这种错误,它强制程序员写出安全的代码。

  strcpy_s是VS后续版本中微软新推出的更安全的函数。
  strcpy之所以不安全是因为它需要程序员保证输出buffer不会越界。
  应用实例
  已知strcpy函数的原型是:
  char * strcpy(char * strDest,const char * strSrc);
  ⒈不调用库函数,实现strcpy函数。
  ⒉解释为什么要返回char *。
  解说
  ⒈strcpy的实现代码
  char * strcpy(char * strDest,const char * strSrc)
  {
  if ((NULL==strDest) || (NULL==strSrc)) //[1]
  throw "Invalid argument(s)"; //[2]
  char * strDestCopy = strDest; //[3]
  while ((*strDest++=*strSrc++)!='\0'); //[4]
  return strDestCopy;
  }


湖口县18570916654: C/C++中strcpy和strncpy的区别 -
钮民安度: strcpy 复制到字符串结束符\0为止. strncpy比strcpy多了一个参数n,当复制数量达到n或者遇到\0这两个都会导致复制结束. 所以 strncpy可以确保不会溢出,更安全一些.

湖口县18570916654: C++中strcy和strcat什么意思 -
钮民安度: 字符串复制函数strcpy 函数原型:strcpy(char[],const char[]); strcpy的作用是将第二个字符数组中的字符串复制到第一个字符数组中去,将第一个字符数组中的相应字符覆盖.例如:char str1[10],str2[]="china"; strcpy(str1,str2); 执行后,str2中...

湖口县18570916654: C++ strcpy()怎么用?? -
钮民安度: C++的strcpy()用于字符串复制,用法是传入2个字符数组指针来执行,如strcpy(a,b)是将b指向的字符串复制到a指向的空间中. strcpy,即string copy(字符串复制)的缩写.strcpy是一种C语言的标准库函数,strcpy把含有'\0'结束符的字符串...

湖口县18570916654: c++中到底有strcpy这些函数没,麻烦哪位高手指教一下,举个例子哈!!! -
钮民安度: 有这个函数,这个函数定义在cstring里面,当然,C++库函数里保留了string.h这个头文件.使用方法:先#include或者 #include 这里有调用成功的用例:#include #include using namespace std; int main() { char str1[] = "Test"; char str2[128]; strcpy(str2,str1); coutsystem("pause"); } 其余C的字符串处理函数比如strcmp,strcat等与之类似,都在同一个头文件下.

湖口县18570916654: c++strcpy 和 是strncpy区别 -
钮民安度: Strcpy和Strncpy的区别 第一种情况:char* p="how are you ?";char name[20]="ABCDEFGHIJKLMNOPQRS";strcpy(name,p); //name改变为"how are you ? "====>正确!strncpy(name,p, sizeof(name));//name改变为"how are you ?...

湖口县18570916654: C语言 - strcpy与strcat的用法 -
钮民安度: strcpy()是字符串复制函数.连字符串的结束标志'\0'一同复制.对于strcpy(a+1,b+2);中的b+2则是数组里的“h\0”的首地址. a+1则是数组里的“bcde”的首地址. 即此函数的意义是:把“h\0”复制到“bcde”的位置.字符串遇到'\0'结束 即结果是:ah.对于strcat(s[0],s[1]);中的二为数组可以看成是多个一维数组组成的.所以 s[0]代表的是“a”的首地址,s[1]代表的是“good”的首地址.这是字符串连接函数.即把good放到了a的后面. 结果是:agood.

湖口县18570916654: strcpy()这个函数在C++中的含义是什么? -
钮民安度: 字符串拷贝 strcpy(a,b) 把b的内容复制到a strcpy=string+copy原型:extern char *strcpy(char *dest,char *src); 用法:#include 功能:把src所指由NULL结束的字符串复制到dest所指的数组中. 说明:src和dest所指内存区域不可以重叠且dest...

湖口县18570916654: strcpy的用法 -
钮民安度: strcpy的2个参数应该是char*类型的,这里的a b都是string类型的,所以类型不对,编译无法通过其次,string类型已经重载运算符+,所以要连接2个string类型的变量,可以a=a+b;

湖口县18570916654: c++中strcpy函数用法,具体作用什么,有例子更好 -
钮民安度: 用法是把一个字符数组的值赋值给另一个字符数组,例如:strcpy(a, b);意思就是把b的值赋给a

湖口县18570916654: vc++ strcpy是什么? -
钮民安度: 函数名: strcpy 功 能: 串拷贝 用 法: char *strcpy(char *str1, char *str2); 程序例: #include#includeint main(void){char string[10];char *str1 = "abcdefghi";strcpy(string, str1);printf("%s\n", string);return 0;}

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网