new失去一个内存指针,想之后取这个空间的第一个字符为什么不行

new得到一个内存指针,想之后取这个空间的第一个字符为什么不行?
问题:
         char*  s=NULL;//总的字符串空间
         char*  s1=new char[2];//获取一个char长度的字符
         s_len=100;//空间大小
         s=new char[s_len];//申请空间
         int i=0;
         while(i<=s_len)
        {
             //s中存放的是edit控件中的输入数字比如1212121212121212112121212
             strncpy(s1,s+i,1);//依次拷贝一个字符给s1
              MessageBox(NULL,s1,NULL,MB_OK);//希望得到1、2、1、2这样的显示
        }//end while
结果:        
         不是想要的,获得的字符是三个int长度,第一个是正常的数字,但是后面都是乱码?为什么。
         请高手指教!!!谢谢
------解决思路----------------------
 strncpy(s1,s+i,1);//这个函数的具体用法你要清楚:
1、strncpy 指定复制 n 个字符,
2、不足时用NULL结束符填充
3、多的话不会写NULL结束符。你上面的代码就是这个问题了。只复制一个字符,但字符串结束符却没有,导致后面一堆乱码。
------解决思路----------------------
你查查 函数strncat的说明,你那样做,一点变化都没有。
strncat 是连接两个字符串,最多加入 n 个字符。

int  n = 1 ; 
strncpy(s1,s+i,n); 
S1[n] = 0 ; //这样设字符串结束符。使用strncpy时,不要忘记设置字符串结束标志。

你的例子,这样实现更简单:
S1[0] = s[i] ; 
S1[1] = 0 ;

------解决思路----------------------
 while(i<=s_len)
        {
             //s中存放的是edit控件中的输入数字比如1212121212121212112121212
             strncpy(s1,s+i,1);//依次拷贝一个字符给s1
              MessageBox(NULL,s1,NULL,MB_OK);//希望得到1、2、1、2这样的显示
        }//end while

是个死循环!!!
------解决思路----------------------
这个你应该自行理清楚程序运行的逻辑 。 
在while 循环中, i 值没变,当然就会死循环。