char *は、基本的に文字へのポインタです。Cが行うことは、このポインターが配列の最初の文字を指すようにすることです。
std :: stringは、ベクトルによく似たクラスです。内部的には、文字の配列の格納を処理し、格納された配列を操作するためのいくつかのメンバー関数と、いくつかのオーバーロードされた演算子をユーザーに提供します。
std ::stringに対してchar*を使用する理由:
C backwards-compatibility.
Performance (potentially).
char*s have lower-level access.
char*よりもstd::stringを使用する理由:
Much more intuitive to use.
Better searching, replacement, and manipulation functions.
Reduced risk of segmentation faults.
例 :
char *は、char配列、または動的に割り当てられたchar配列と組み合わせて使用する必要があります。結局のところ、ポインタは実際に何かを指さない限り意味がありません。これは主にCプログラムで使用されます。
char somebuffer[100] = "a string";
char* ptr = somebuffer; // ptr now points to somebuffer
cout << ptr; // prints "a string"
somebuffer[0] = 'b'; // change somebuffer
cout << ptr; // prints "b string"
'somebuffer'を変更すると、'ptr'も変更されることに注意してください。これは、この場合、somebufferが実際の文字列であるためです。ptrはそれを指す/参照するだけです。
std :: stringを使用すると、それほど奇妙ではありません。
std::string a = "a string";
std::string b = a;
cout << b; // prints "a string"
a[0] = 'b'; // change 'a'
cout << b; // prints "a string" (not "b string")
ここでは、「b」が実際の文字列であるため、「a」を変更しても「b」には影響しないことがわかります。
しかし実際には、主な違いは、char配列ではメモリの管理を担当するのに対し、std::stringが管理することです。C ++では、文字列に対してchar配列を使用する理由はほとんどありません。100回のうち99回は、文字列を使用したほうがよいでしょう。
メモリ管理とポインタを完全に理解するまでは、頭痛の種を避けてstd::stringを使用してください。