私は C を学ぼうとしています。手始めに、自分の練習用に strcpy を書き始めました。ご存知のように、元の strcpy ではセキュリティ上の問題が発生しやすいため、「安全な」strcpy を作成する作業を自分自身に課しました。
私が選択したパスは、ソース文字列 (文字配列) が実際に宛先メモリに収まるかどうかを確認することです。私が理解しているように、C の文字列は文字配列へのポインタに過ぎず、0x00 で終了します。
だから私の課題は、コンパイラが宛先文字列のために実際に予約したメモリの量を見つける方法ですか?
私は試した:
sizeof(dest)
しかし、それは機能しません。(後でわかったように)実際にはポインターである dest のサイズを返し、私の 64 ビット マシンでは常に 8 を返すためです。
私も試しました:
strlen(dest)
ただし、最初の 0x0 が検出されるまでの長さを返すだけであり、予約されている実際のメモリを必ずしも反映していないため、これも機能しません。
したがって、これはすべて次の質問に要約されます。目的の「文字列」のためにコンパイラが予約したメモリの量を見つけるにはどうすればよいですか???
例:
char s[80] = "";
int i = someFunction(s); // should return 80
「someFunction」とは?
前もって感謝します!