美文网首页
C++中的strcpy

C++中的strcpy

作者: 乔大叶_803e | 来源:发表于2019-12-25 15:13 被阅读0次

函数原型 char *strcpy(char *dest,const char *src)

从src地址开始且含有null结束符的字符串复制到以dest地址开始的字符串中,并返回指向dest的指针。通俗的讲就是将 src字符数组复制到dest数组中,如果dest数组本身有数据,会把src里的数据全部复制到dest中,如果dest中有数据小于src地址长度的将会被覆盖,而大于src长度的将保留。

注意

dest的地址长度要足够大,不然会产生溢出。Dest的内存长度要大于等于src的内存长度。

void test1()
{
 char string[10];
 char* str1 = "0123456789";
 strcpy( string, str1 );
}

这个就会出现错误,是疑问str1字符串是11个字节的元素,但是string只有10个字节,就会出现溢出,引发报错。

字符串str1需要11个字节才能存放下(包括末尾的’\0’),而string只有10个字节的空间,strcpy会导致数组越界;

下边的代码出现的问题

void test2()
{
char string[10], str1[10];
int i;
for(i=0; i<10; i++)
{
str1  = 'a';
}
strcpy( string, str1 );
}

因为strcpy会从地址一直往后进行拷贝,直到遇到'\0'为止。所以拷贝的长度是不定的。如果没遇到'\0'的话就会崩溃了。

检查下面代码有什么问题?

void GetMemory( char *p )
{
 p = (char *) malloc( 100 );
}
void Test( void ) 
{
 char *str = NULL;
 GetMemory( str ); 
 strcpy( str, "hello world" );
 printf( str );
}

在c++中,尤其是函数调用或者函数返回的时候,通常会遇到调用 引用(&) 或者返回 引用(&) 对象,更甚者函数调用 **(指针的指针)

*p—是指的是p的地址
**p——指向p的地址的指针
*&p——指向p的值的指针

再使用malloc分配内存后需要对内存进行释放

需要free操作

相关文章

网友评论

      本文标题:C++中的strcpy

      本文链接:https://www.haomeiwen.com/subject/vwycoctx.html