函数原型:strcpy(char *str1,const char str2);
功能:将含有’\0’结束符的字符串str2复制到另一个地址空间str1,返回值的类型为char;
可以指定赋值的地址空间位置如:strcpy(str1+2,str2);将str2拷贝到str1的地址向后偏移两个字符位置。
注意事项:
1.没分配内存空间不能直接strcpy(可以使用数组char a[10]={0},malloc(),calloc()等来分配内存空间)
2.char* p2;这是在声明一个变量;声明变量是不分配内存的,这时不能使用strcpy(p2,“xxxx”);不能给没分配空间的内存进行strcpy;
3.p2 = p1是两个指针指向同一块内存,是指针的地址赋值 ,属于浅拷贝
4.strcpy后两个指针分别指向不同内存,内存中的内容一样,是地址指向的内存进行赋值,属于深拷贝
5.char *p=“abc”;strcpy(p,“xxxx”),p为字符串常量指针,字符串的值是不能改变的;不能给一个字符常串量赋值, 会报段错误
strcpy(char *str1,const char *str2)函数的替代函数sprintf(str1,"%s",str2 ),一样的将str2指向的值按字符格式写入到str1指向的内存空间。
函数原型:int sprintf(char *string, char *format [,argument,…]);
功能:把格式化的数据写入某个字符串中,即发送格式化输出到 string 所指向的字符串。
spirntf(buffer,"%s",str2);使用sprintf 对于写入buffer的字符数是没有限制的,这就存在了buffer溢出的可能性。解决这个问题,可以考虑使用 snprintf函数,该函数可对写入字符数做出限制:snprintf(buffer,sizeof(buffer),"%s",str2);此处buffer必须是分配了内存空间的字符变量,且不能为指针,因为sizeof(指针变量)的值,并不是指针对应的内存空间的大小;如果buffer为指针时,指定的大小值需要是该指针指向的内存的空间大小;
函数原型:int snprintf(char* dest_str,size_t size,const char* format,…);
功能:将可变个数参数(…)按照format格式化成字符串,然后将其复制到str中。
(1) 如果格式化后的字符串长度 < size,则将此字符串全部复制到str中,并给其后添加一个字符串结束符(’\0’);
(2) 如果格式化后的字符串长度 >= size,则只将其中的(size-1)个字符复制到str中,并给其后添加一个字符串结束符(’\0’),返回值为欲写入的字符串长度。
函数原型:char *strncpy(char *destinin, char *source, int maxlen);
功能:把src所指向的字符串中以src地址开始的前n个字节复制到dest所指的数组中,并返回被复制后的dest