0

ユーザーに名前、名前の順に入力するように求めるプログラムを作成します。このプログラムは、ユーザーの名前の後にコンマ、スペース、名を続けた3番目の文字列を作成、保存、表示します。 cstringヘッダーファイルのchar配列と関数を使用します。実行例は次のようになります。名を入力してください:Flip姓を入力してください:Fleming単一の文字列の情報は次のとおりです: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;
}

配列の途中で文字をポイントしてコピーを開始するとクラッシュするのはなぜですか?

4

2 に答える 2

7
fName = new char;

単一の文字を割り当てます。

cin.getline(fName,100);

それをはるかに超えています。

std::string代わりに使用してください。CではなくC++でC++コードを書くと、作業がずっと楽になることがわかります。

于 2012-08-21T18:20:10.323 に答える
2

の型fullName[strlen(lName)+2]はcharで、ポインタを取得するには次のようにします。

char* dummy=fullName + strlen(lName)+2;
于 2012-08-21T18:21:24.440 に答える