char
このように使用するためのストレージを割り当てればnew
OKです。ただし、後で null 終端文字に関連する関数 (strlen
つまり、これを出力するなど) でそれを使用する場合は、 a のストレージを割り当てるときにchar*
、文字数+ 1をさらに を格納するために割り当てる必要があります\0
。C 文字列は null で終了する必要があります。
「ABCDE」ではなく「ABCDExxxx」と表示されるのはなぜですか? メモリ割り当ての何が問題になっていますか?
あなたのデータはnullで終了していません('\0'
最後に含まれていないため、文字'\0'
がどこかで見つかるまでガベージを出力しています)。期待どおりに動作させるには、次のことができます。
int n = 5;
char* p = new char [n+1];
p[n]='\0';
for(i=0;i<n;i++)
{
p[i] = 'A'+i;
^
side note: this is OK, however if your p has been pointing to a string
literal, i.e. if it was defined as char*p = "string literal\n";
then according to section 2.14.5 paragraph 11 of the C++ standard,
it would invoke undefined behavior:
The effect of attempting to modify a string literal is undefined.
so be aware :p !
}
cout<<p<<endl;
次に、ストレージの割り当てを解除することを忘れないでください
delete [] p;
他の人がコメントしたように、std::string
代わりに使用することをお勧めします。