一个简单的c ++程序崩溃了吗?

时间:2012-08-21 18:17:55

标签: c++ pointers

编写一个程序,要求用户输入他或她的名字然后持续 name,然后构造,存储和显示第三个字符串,由 用户的姓氏后跟逗号,空格和名字。使用char数组和 来自cstring头文件的函数。示例运行可能如下所示: 输入您的名字:翻转 输入您的姓氏:弗莱明 以下是单个字符串中的信息:Fleming,Flip

int main()
{

    char * fName,*lName,*fullName;

    fName = new char;
    cin.getline(fName,100);

    lName=new char;
    cin.getline(lName,100);

    fullName=new char[strlen(lName)+strlen(fName)+3];

    strncpy(fullName,lName,strlen(lName));

    fullName[strlen(lName)]=',';
    fullName[strlen(lName)+1]=' ';


    char* dummy=(char*)fullName[strlen(lName)+2];//making a pointer to the char after the ' ' char to start copying the first name

    strncpy(dummy,fName,strlen(fName));

    dummy[strlen(fName)+strlen(lName)+2]='\0';

    cout<<endl<<endl<<dummy<<endl;



    delete fullName;
    delete lName;
    delete fName;
    return 0;
}
当我指向数组中间的一个字符并开始复制时,为什么它会崩溃???

2 个答案:

答案 0 :(得分:7)

fName = new char;

分配一个字符。

cin.getline(fName,100);

远远超出了这一点。

请改用std::string。你会发现用C ++而不是C编写C ++代码会让生活变得更容易。

答案 1 :(得分:2)

fullName[strlen(lName)+2]的类型是char,以获取指针:

char* dummy=fullName + strlen(lName)+2;