本人刚学c++遇到一道难题求指点。解决办法

本人刚学c++遇到一道难题求指点。。。?
本人刚学c++遇到一道难题求指点。解决办法
本人刚学c++遇到一道难题求指点。解决办法

本人刚学c++遇到一道难题求指点。解决办法
之后按enter时就出现了中断
本人刚学c++遇到一道难题求指点。解决办法
为什么会出现这个问题啊?怎么解决啊?
------解决方案--------------------
引用:
本人刚学c++遇到一道难题求指点。解决办法
本人刚学c++遇到一道难题求指点。解决办法

本人刚学c++遇到一道难题求指点。解决办法
之后按enter时就出现了中断
本人刚学c++遇到一道难题求指点。解决办法
为什么会出现这个问题啊?怎么解决啊?

// dsds.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

#include <iostream>
#include <Cstring>
#include <string>
#include <stdio.h>
char *getname()
{
char temp[50];
gets(temp);
char *pn = new char[51];
strncpy(pn,temp,49);
return pn;

}
 int main ()
 {
 char *fname;
     char *lname;
  printf("输入first name\n");
 fname = getname();
 printf("%s\n",fname);
  printf("输入last name\n");
 lname = getname();
     return 0;
 }



这样是不会报错得
你报错得原因在于  你随便使用strlen(temp+1);
你这个temp都没初始化 strlen是遇到\0结束的 所以你开辟的空间是未定义的大小

或许 编译器 在第一用函数局部变量的时候是随机的 当调用完成 有得编译器会把值赋空

所以你第一次 很小概率出问题 第二次 直接就开辟了一个空间 
//注明  这个编译器的实现 我只是猜测 毕竟我又不是写那个的
但是 什么看适合理就怎么猜测 这往往都是对的