C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++でのstring型とchar[]型の違い


このセクションでは、C++でのstringとchar[]の違いを説明します。 char[]は基本的に文字の配列です。したがって、この配列にはいくつかのプロパティがあります。これらのプロパティを以下に示します。

  • char []がスタックセクションに割り当てられている場合、常に256バイトのスペースを占有します。テキストのサイズには依存しません。

  • malloc()またはcalloc()を使用して、そのスペースをヒープセクションに動的に割り当てる場合、これを使用した後にメモリを解放する責任があり、常にヒープ割り当てのオーバーヘッドが発生します。

  • 文字配列のサイズが256文字より大きい場合、プログラムがクラッシュする可能性があります。コードに醜いアサーションメッセージが生成される可能性があります。

  • 文字列の長さを取得するには、毎回「\0」文字に達するまで文字配列全体をスキャンする必要があります。

一方、C++では標準の名前空間に文字列が組み込まれています。この文字列はクラスであり、その中に文字配列が含まれています。ユーザーのために自動的に管理します。ほとんどの場合、文字列の組み込み配列は16文字です。したがって、短い文字列の場合は文字列をフラグメント化しませんが、大きい文字列の場合はヒープセクションを使用します。

C++文字列には「\0」文字が組み込まれています。文字列の長さをカウントせずに格納します。短いテキストはヒープをとらないので、バッファオーバーランから保護します。さらに、文字列はC++で簡単に使用できます。


  1. C++文字列定数と文字定数の違い

    C ++では、一重引用符で囲まれた文字は文字リテラルです。文字型です。たとえば、「a」は、ASCIIベースのシステムでは値97のchar型です。 二重引用符で囲まれた1文字または文字列は、文字列リテラルを表します。これはconstchar[]型であり、文字列の長さ+1のサイズの配列を参照します。その余分な文字は文字列の終わりを示すためにあります。 文字列リテラルは、「abcdefg」のように任意の長さにすることができます。文字リテラルには、ほとんどの場合、1文字だけが含まれます。これらが印刷されるとき、文字列リテラルは、文字列で最初の\0またはNULL文字が検出されるまで印刷されます。

  2. C++での関係演算子(==)とstd ::string ::compare()の違い

    関係演算子==とstd::string ::compare()の違いは1つだけです。それが戻り値です。内部的には、string ::operator ==()はstring ::compare()を使用しています 関係演算子(==)は、2つの文字列が等しいかどうかを示すブール値を返し、compareは、文字列の相互関係を示す整数を返します。 ユースケースを詳しく説明するために、compare()は、2つの文字列がたまたま異なっている場合に、2つの文字列が互いにどのように関連するか(小さいか大きいか)に関心がある場合に役立ちます。たとえば、 例 #include <iostream>