c语言里strcpy作用是什么,请问C语言里strcpy具体怎么使用

描述

标准库的string类提供了3个成员函数来从一个string得到c类型的字符数组:c_str()、data()、copy(p,n)。

c语言strcpy()用法

这是C语言里面复制字符串的库函数, 函数声明包括在专门处理字符串的头文件《string.h》中:

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

这个函数把字符串src复制到一分配好的字符串空间dst中,复制的时候包括标志字符串结尾的空字符一起复制。操作成功,返回dst,否则返回NULL.

你要注意,你的第二个字符串src的长度+1(+1是因为字符串以空子符结束)不能超过你为dst开辟的空间的大小,否则src里的空字符无法复制到dst里面,你的dst就成了字符数组,不是字符串了,那样如果你后面有一条printf或者puts语句什么的,要打印出dst的,那就会由于没有空字符标志字符串的结束而越界了。

例如:

定义一个字符串char a[20],和一个字符串c[]=“i am a teacher!”;

把c复制到a中就可以这样用:strcpy(a,c);

这个函数包含在头文件 《string.h》中。

程序代码:

#include《string.h》

#include《iostream.h》

void main()

{char a[20],c[]=“i am teacher!”;

strcpy(a,c);

cout《《a《《endl;

}

你看好了:

char a[20] = “abcde”

strcpy(&a[1], a)函数是逐个字符拷贝,

首先拷贝第一个字符,a[0] == ‘a’;a[1] = a[0]; 即a[1] = ‘a’;

然后拷贝第二个字符,此时a[1] == ‘a’; a[2] = a[1];即a[2] = ‘a’;

依次类推!!!a[0] = ‘a’没什么用,其实初始a[0]就等于‘a’的!

copy(p,n,size_type _Off = 0):从string类型对象中至多复制n个字符到字符指针p指向的空间中。默认从首字符开始,但是也可以指定,开始的位置(记住从0开始)。返回真正从对象中复制的字符。------用户要确保p指向的空间足够保存n个字符。

// basic_string_copy.cpp

// compile with: /EHsc /W3

#include 《string》

#include 《iostream》

int main( )

{

using namespace std;

string str1 ( “1234567890” );

basic_string 《char》::iterator str_Iter;

char array1 [ 20 ] = { 0 };

char array2 [ 10 ] = { 0 };

basic_string 《char》:: pointer array1Ptr = array1;

basic_string 《char》:: value_type *array2Ptr = array2;

cout 《《 “The original string str1 is: ”;

for ( str_Iter = str1.begin( ); str_Iter != str1.end( ); str_Iter++ )

cout 《《 *str_Iter;

cout 《《 endl;

basic_string 《char》:: size_type nArray1;

// Note: string::copy is potentially unsafe, consider

// using string::_Copy_s instead.

nArray1 = str1.copy ( array1Ptr , 12 ); // C4996

cout 《《 “The number of copied characters in array1 is: ”

《《 nArray1 《《 endl;

cout 《《 “The copied characters array1 is: ” 《《 array1Ptr 《《 endl;

basic_string 《char》:: size_type nArray2;

// Note: string::copy is potentially unsafe, consider

// using string::_Copy_s instead.

nArray2 = str1.copy ( array2Ptr , 5 , 6 ); // C4996

cout 《《 “The number of copied characters in array2 is: ”

《《 nArray2 《《 endl;

cout 《《 “The copied characters array2 is: ” 《《 array2Ptr 《《 endl;

注意一定要使array3有足够的空间

//char array3[5]={0};

//basic_string《char》::pointer array3Ptr=array3;

//basic_string《char》::size_type nArray3;

//nArray3 = str1.copy(array3,9); //错误!!!!

//cout《《“The number of copied characters in array3 is: ”

// 《《nArray3《《endl;

//cout《《“The copied characters array3 is: ”《《array3Ptr《《endl;

}

上面最后注释掉的部分,虽然编译没有错误,但是运行时会产生错误:Stack around the variable ‘array3’ was corrupted.

打开APP阅读更多精彩内容

点击阅读全文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值