1. ホーム
  2. c

[解決済み] C 言語の Null 終端文字列

2022-03-06 10:51:16

質問

C言語の文字列は、最後の1文字をセットする必要があるのでしょうか?をセットしないと、デバッグ時にstring1[257]がNULLにならない。文字列の配列の割り当てられたメモリの解放に問題があるので、それが原因だと思いました。

char string1[257], string2[257];
scanf("%s", &string2);
string1[257] = '\0';
strncpy(string1, string2, 257);
string1[257] = '\0'; /* do I need to do that? */

解決方法は?

絶対に必要ですか? いいえ を呼び出すと scanf , strcpy (を除く strncpy をコピーすると、ヌルターミネータがコピーされます。どうせなら、そうするのが良いのでしょうか? そうでもない バッファオーバーフローの問題を解決することはできないのです。なぜなら、これらの関数はバッファのサイズを超過してしまうからです。では、どうするのが一番いいのでしょうか? std::string .

ちなみに、もしあなたが string1[257] をアクセス/ライティングしているため、バインドされなくなります。 258位 の要素は、サイズ257の配列に含まれます。(0ベースのインデックスです)