首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

一个小疑点,想了好久不会

2013-08-13 
求助一个小问题,想了好久不会char *snew char[30]怎么把这个动态创建的字符数组,复制给另外一个char *m

求助一个小问题,想了好久不会
char *s=new char[30];怎么把这个动态创建的字符数组,复制给另外一个char *m呢,这个s和m不能指向同一个字符数组一个小疑点,想了好久不会
[解决办法]
bad coding style in c++(in most of the times)


char *s = new char[30];
char *m = new char[30];

//.......assign value to s

//copy应该比memcpy优先, 他会自动选择效率最好的方法copy
memcpy(m, s, 30);

delete []s;
delete []m;


上面那段代码为何说是不好的coding style(大部分情况下)?

1 : 应该用RAII来管理资源,详阅--Smart pointers: No delete
http://herbsutter.com/elements-of-modern-c-style/
2 : 用stl可以很容易的把问题解决掉


std::string s("wahteverere");
std::string m = s;


你也许会看到中国有很多人还在c++中使用第一种写法
千万不要被他们带坏了,如果你不清楚身边的“大牛”们正确与否
最简单的方法就是“向最好的学习”--herb sutter, bjarne, lippman等人
都是赫赫有名,实战经验丰富的大师,绝非你身边的“大牛”可比的

当然,在中国,有很多人都以为自己很行
连sutter,bjarne,andrei,lippman这种实战经验丰富
享誉国际,能对c++社区带来重大影响的人物之教诲都听不进去
总是缩在自己的小圈圈里面,使用着过时的技术,过时的观念在编码
而且还很用力的排挤自己不清楚的技术,为的就是巩固地位,图个轻松(懒得学了)
所谓十年功力其实是十个一年而非一个十年,这种人多了就会出现劣币驱逐良币的现象
成为阻碍时代进步的癌细胞
[解决办法]


char *s = new char[30];
char *m = new char[30];

strcpy(m, s);//这个是专门针对字符串的,以\0为结束

delete []s;
delete []m;


[解决办法]

char *s=new char[30];
char buf[30] = {0};

//选择一个,
memcpy(buf, s, 30);
strncpy(buf, s, 30);

热点排行