C++字符串复制函数
来源:互联网 发布:开源 文档系统 php 编辑:程序博客网 时间:2024/05/21 08:59
今天用到字符串的复制操作,做一个以二进制的形式读一个文件,以16进制写到TXT中,再以十六进制转换成二进制写回原文件。达到复制文件的效果,同时用的是多线程,边读边写的操作。
期间做一个缓冲区用到了字符串的复制,首先想到的是strcpy就用上了,但转回的原文件一直报错打不开,调试了大半天逻辑是没有问题的,只是错在了用strcpy。
strcpy:顾名思义,复制一个字符串,函数原型为:
1、char * strcpy(char* destination,const char * source);
你会发现没有对复制字符个数的规定,所以此函数是根据字符串内的’\0’来决定要复制的长度。其后的字符可能就填充了一些其他的东西,达不到自己想要的效果。
下面列举下常用的字符串复制函数:
突然发现对字符串函数缺乏系统的了解,所以花了一点时间专门整理下,在此记录之,以方便自己及有需要的人使用。
C/C++字符串函数的头文件:string.h
复制函数主要有4个,如下:
1、char * strcpy(char* destination,const char * source);
2、char* strncpy(char* destination,const char* source,size_t num);
3、void * memcpy(void* destination,const void* source,size_t num);
4、void * memmove(void* destination,const void* source,size_t num);
功能及用法说明:
1、strcpy:将由source指针指示的C 字符串(包括结尾字符)复制到destination指针指示的区域中。该函数不允许source和destination的区域有重叠,同时,为了避免溢出,destination区域应该至少和source区域一样大。
2、strncpy:复制source的前num字符到destination。如果遇到null字符(’\0’),且还没有到num个字符时,就用(num - n)(n是遇到null字符前已经有的非null字符个数)个null字符附加到destination。注意:并不是添加到destination的最后,而是紧跟着由source中复制而来的字符后面。下面举例说明:
char des[] = “Hello,i am!”;
char source[] = “abc\0def”;
strncpy(des,source,5);
此时,des区域是这样的:a,b,c,\0,\0,i,空格,a,m,!
\0,\0并不是添加在!的后面。
这里,需要注意strcpy仅仅复制到null字符就结束了。
3、memcpy:将source区域的前num个字符复制到destination中。该函数不检查null字符(即将null字符当作普通字符处理),意味着将复制num个字符才结束。该函数不会额外地引入null字符,即如果num个字符中没有null字符,那么destination中相应字符序列中也没有null字符。同strcpy的区别:允许将source中null字符后面的字符也复制到destination中,而strcpy和strncpy则不可以。
4、memmove:同memcpy完成同样的功能,区别是,memmove允许destination和source的区域有重叠。而其他三个函数不允许。
例子:char str[] = “This is a test!”;
memmove(str+2,str+10,4);
此时,str变成:Thtests a test!
在C++中,对内存的掌握是尤其重要!
以下的介绍转自:
http://www.cnblogs.com/cappuccino/p/4651199.html
- C语言字符串复制函数
- C/C++字符串函数之复制函数
- C/C++字符串函数之复制函数
- C/C++字符串函数之复制函数
- C/C++字符串函数之复制函数
- C/C++字符串函数之复制函数
- 最快的C字符串复制函数
- C语言字符串复制和链接函数
- C语言自定义字符串复制函数
- C语言 - 自定义字符串复制函数
- C语言strcpy()函数:复制字符串
- C语言strcpy()函数:复制字符串
- C语言strcpy()函数:复制字符串
- C标准库函数-字符串复制和字节复制函数
- 【C语言】字符串复制。(不能使用strcpy函数)
- C语言中字符串的复制与memcpy函数
- C语言 - 自定义实现字符串部分复制函数
- C语言 - strdup()函数复制字符串的实现
- 搭建dubbo监控中心
- spring的工作原理
- 最大熵学习笔记(零)目录和引言
- 返回键等效home键的效果
- 单播,组播,广播
- C++字符串复制函数
- PRODUCT_COPY_FILES 客户配置无法覆盖的问题
- android 动画 ValueAnimator 和ObjectAnimator 基本用法
- Hiberntate不能自动建表的问题:hibernate.
- listview点击事件和其子view点击事件冲突时。
- SpringMVC-基础篇-UerController
- webpack.config.js解析
- C语言调用System命令并获取命令的返回值
- HashMap和TreeMap的区别