【发布时间】:2012-05-30 09:31:42
【问题描述】:
在字符串上多次使用 _tcsncpy_s() 是否会覆盖旧内容?还是它创建新内容然后指向新内容?举个简单的例子,如果我有:
LPTSTR myString = new TCHAR[MAX_PATH];
LPTSTR copiedString1 = "Hello";
LPTSTR copiedString2 = "Rock";
_tcsncpy_s(myString,MAX_PATH,copiedString1,5); //1
//delete [] myString; //3
//LPTSTR myString = new TCHAR[MAX_PATH]; //3
_tcsncpy_s(myString,MAX_PATH,copiedString2,4); //2
我在 1 处理解:我们有 myString --> 'H' 'e' 'l' 'l' 'o'
但是在第 2 点:'R' 'o' 'c' 'k' 是否被复制到 'H' 'e' 'l' 'l' 上,而 'o' 仍然存在?还是它现在指向内存中的一个新区域?我需要像 3 那样删除并重新创建 myString 吗?如果我先复制了String2,然后复制了String1,该怎么办?会发生什么不同的事情吗?还有什么可能有用的吗?
感谢您的宝贵时间,祝您有愉快的一天。
【问题讨论】:
-
为什么_tcsncpy_s要分配新内存??您正在向它传递一个指向它应该写入的内存位置的指针,它只是写入该位置...如果您将相同的位置传递两次,它会两次写入相同的位置...这里没有魔术发生.