1

私は C++ に慣れていないので、char 配列を定義するときに null 文字を除外するとどうなるのだろうと考え始めました。

たとえば、null 文字を含む char 配列を定義すると、次のようになります。

char myarray[] = {'a', 'b', 'c', '\0'};

次に、ヌル文字なしで定義します。

char myarray[] = {'a', 'b', 'c'};

このシナリオにおけるヌル文字の重要性は何ですか? 上記の例に null 文字がないと、後で問題が発生する可能性がありますか?...この方法で char 配列を定義するときは、常に null 文字を含めるか除外することをお勧めしますか?

助けてくれてありがとう:)

4

6 に答える 6

8

これは、char*パラメータとして受け取るものはすべて、null で終わる文字列であると想定し、未定義の動作を呼び出し、何らかの方法で失敗することを意味します*

いくつかの例はstrlenstd::string(const char*)コンストラクター、std::ostream operator<<特殊化char*...

* 未定義の動作は、「正しく」動作する可能性があることを意味しますが、これが再現可能であるという保証はありません。

于 2013-11-05T11:17:26.443 に答える
2

char 配列を定義するときにヌル文字を除外するとどうなりますか?

指定した文字だけを含む配列を取得します。

このシナリオにおけるヌル文字の重要性は何ですか?

C では、文字列を null で終わる文字配列として表すのが一般的です。この規則は、C スタイルのインターフェイスと相互運用するため、または文字列リテラル (C から仕様を継承したもの) を操作するために、またはプログラマーが何らかの理由でそれが良い考えであると考えるために、C++ で使用されることがあります。これを行う場合は、明らかに、文字列として解釈するすべての配列を終了する必要があります。

何らかの理由で C のタグも付けましたが、質問は C++ に関するもののようです。C++ では、通常、std::string文字列を管理するために を使用します。低レベルの配列やポインターをいじるには、人生は短すぎます。

上記の例にヌル文字がないと、後で問題が発生する可能性がありますか?

終端されていない配列を、終端された配列を期待する関数に渡すと、配列の末尾を踏みつけて、未定義の動作を引き起こします。

このように char 配列を定義するときは、常にヌル文字を含めたり除外したりすることをお勧めしますか?

配列が何に使用されることになっているのかを理解し、C スタイルの文字列であることが想定されている場合はターミネータを含めることをお勧めします。

于 2013-11-05T11:28:39.190 に答える
2

終端の null 文字がない場合でも、null 文字の場合と同じように char 配列を使用できます。ただし、null で終わる文字列を想定する関数 ( などstrlen) は、末尾がどこにあるのかわからないため、末尾で停止しません。(それが null-char の目的です) したがって、境界を超えてセグメンテーション違反が発生するか、null-char が見つかるまで実行されるまで、メモリ内で動作し続けます。

基本的に、char 配列を文字列にしたい場合は、末尾を示すために null-char を追加します。

于 2013-11-05T11:21:33.237 に答える
1

このシナリオにおけるヌル文字の重要性は何ですか?

高い。

上記の例にヌル文字がないと、後で問題が発生する可能性がありますか?

はい。この C 文字列を指す を受け取る C および C++ 関数では、char*null で終了する必要があります。

このように char 配列を定義するときは、常にヌル文字を含めたり除外したりすることをお勧めしますか?

ない。std::stringあなたはC++を書いていると言ったので、を使用することをお勧めします。

于 2013-11-05T11:27:57.423 に答える
1

配列を文字列として使用する場合、null 文字は strlen のような関数で使用されます。テキストを使用したいために文字列が必要な場合は、次のように記述します。

const char* mystr = "abc"; // it is already null terminated

書き込み:

char myarray[] = {'a', 'b', 'c', '\0'};

冗長です

于 2013-11-05T11:28:17.397 に答える