当我使用模板将一个char数组复制到另一个时出现问题
Issue when I copy a char array to another, using a template
这是我的代码:
#include <iostream>
#include <string>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
template <class T1, class T2>
void copy2(const T1 source[], T2 destination[] , int size){
for (int i=0 ; i < size ; ++i){
destination[i]=static_cast<T1>(source[i]);
}
}
int main() {
const char one[] = "hello";
char two[5];
cout << "one: " << one << endl;
cout << "two: " << two << endl;
copy2(one, two, 6);
cout << "one: " << one << endl;
cout << "two: " << two << endl;
return 0;
}
但它输出:
一:你好
二:
一个:
二:你好
此外,数组"one"是const,因此不应该更改。
PS:当我以以下方式启动数组"二"时,它会起作用(但为什么?):
char two[8];
然而,当我以以下两种方式启动它时,我会出现奇怪的错误:
char two[6];
或
char two[7];
我的最佳猜测是two
和one
在堆栈上彼此相邻,如下所示:
t w o - - o n e - - -
--------------------------------------------
| | | | | | h | e | l | l | o | |
--------------------------------------------
当two
的大小为5时,通过将大小6传递给copy2
,使two
的缓冲区溢出,因此内存将以如下方式结束:
t w o - - o n e - - -
--------------------------------------------
| h | e | l | l | o | | e | l | l | o | |
--------------------------------------------
这就是为什么two
似乎保持"hello",而one
什么也不显示(因为两个覆盖了它的缓冲区,现在空终止符是one
中的第一个字符)。
为了能够将源缓冲区复制到目标,您需要足够大的目标缓冲区来容纳源缓冲区。
char two[5];
没有足够的空间存储H
、E
、L
、L
、O
、