标准库的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.
基于ICCP与仿真预防船体腐蚀的方法介绍
ofdma是什么意思_与OFDM及CDMA的不同
800V架构,能治好电动汽车用户的“里程焦虑”吗?
库克称AI和AR才是苹果未来的核心技术
人机界面 XPR215AT-2P3介绍
请问C语言里strcpy具体怎么使用
分析振动传感器的测试原则
ARM处理器LPC2210在脑血氧监测仪中的应用
薄膜电容器生产工艺
小米6plus什么时候上市?小米6plus推迟发布:小米新机X1抢占先机?售价1999元
医疗废物在线监测系统实用功能
GD32代码移植STM32(一)
人工智能VS传统采编: 新闻业正在经历有史以来最为震撼的大变革
宁德时代与科士达合作_开始进军荷兰家庭储能市场
熔城半导体芯片系统封装及模组制造基地项目开工 总投资达57.8亿元
桥式电路的开关产生的电流和电压
开关电源环路稳定性分析(八)
8155并口扩展实验
隧道ip网络广播系统
用LM7805做一个5V输出电源