嘿嘿,小疑点,大疑惑,有人帮助解决下不。巨谢

嘿嘿,小问题,大疑惑,有人帮助解决下不。。巨谢
#include<iostream>
#include<string>
#define NULL 0
using namespace std;
void main()
{
string a="2234345262666";
string b;
char *p=new char;
char *i=new char;
a.copy(p,3,0);
a.copy(i,4,2);
cout<<strlen(p)<<endl;
strcat(p,i);
for(int s=0;s<strlen(p);s++)
{
cout<<*(p+s);
}
cout<<endl;
}
结果:5
  223 3434加2个奇怪的符号
我想知道为什么程序一运行就出错退出,而对于*P的大小(STRLEN(P))为什么是5而不是3或4??

------解决方案--------------------
呵呵,可是如果程序这样写,还是有问题。
#include <iostream > 
#include <string > 

using namespace std; 
int main() 

string a="2234345262666"; 
string b; 
char *p = new char[10]; 
char *i = new char[10]; 
a.copy(p,3,0); 
cout<<p<<endl;
a.copy(i,4,2); 
cout<<i<<endl;
cout <<strlen(p)<<endl; 
strcat(p,i); 
for(int s=0;s <strlen(p);s++) 

cout <<*(p+s); 

cout<<endl; 


result is:

223
34348=
3
22334348=

使用的编译环境是是DEV-C++.
------解决方案--------------------
没给p和i字符串设置结束符号'\0'