少し余裕を持たせないと、弦がおかしくなります。何が起こっているのか説明できる人はいますか? 質問する

少し余裕を持たせないと、弦がおかしくなります。何が起こっているのか説明できる人はいますか? 質問する

まず、私は C / C++ の初心者であり、元々 PHP 開発者なので、好きなように変数を乱用するように育てられたということを申し上げたいと思います。

C は厳格な国であり、コンパイラはここでは私をあまり好んでいません。私は物事を成し遂げるためにルールを破ることに慣れています。

とにかく、これが私の簡単なコードです:

char IP[15] = "192.168.2.1";
char separator[2] = "||";   

puts( separator );

出力:

||192.168.2.1

しかし、 の定義をseparator次のように変更すると:

char separator[3] = "||";

希望の出力が得られます:

||

では、なぜ私はその男性に、前の男性と寝ないように余分なスペースを与える必要があったのでしょうか?

ベストアンサー1

separatorこれは、長さが 2 に強制されると、null で終了しない文字列が取得されるためです。

ヌル終端文字には常に追加の文字を割り当てることを忘れないでください。長さの文字列には文字Nが必要ですN+1

この要件に違反すると、ヌル終了文字列 (puts()関数を含む) を期待するすべてのコードで未定義の動作が発生します。

最善策は、特定の長さを強制しないことです。

char separator[] = "||";

正確なサイズの配列を割り当てます。

おすすめ記事