【初心者歓迎】C/C++室 Ver.104【環境依存OK】

■ このスレッドは過去ログ倉庫に格納されています
2018/12/28(金) 06:04:52.38ID:ufThBpcD
エスケープシーケンスやWin32APIなどの環境依存なものもOK
そのような質問は必ず環境を書きましょう
半角空白やタブでのインデントはスレに貼ると無くなります

コードを貼れる所
http://codepad.org/
https://ideone.com/

前スレ
【初心者歓迎】C/C++室 Ver.103【環境依存OK】
https://mevius.5ch.net/test/read.cgi/tech/1530384293/
2019/03/12(火) 08:29:27.03ID:i1gu3hXZ
>>743
ポインタが指す先にいくつ分の領域があるか(いくつ分を参照してよいか)は記録されてないから、プログラマが自分の責任で管理するしかないよ
2019/03/12(火) 08:41:29.44ID:7SPfMi3X
>>743
直接長さを示す情報はどこにもないよ
だから、cの「文字列」は単なる文字の配列だけではなく、0終端が必要

>(脱線するけどNULL終端も数えて長さ4?)
その通り
(NULLはnullptrとしてのみ使ったほうがいいよ
混同してないならいいんだけどね)
2019/03/12(火) 09:29:32.99ID:nPeHxcg9
>>740
>>741
>ポインタが示す先の型とサイズやらの心配はC言語では不要だ、すげーだろ?的な。

サイズって型のサイズでした、すみません。

配列長さは
sizeof(*cp) / sizeof(型)で取ってねって書いてあったよね?
2019/03/12(火) 09:32:06.13ID:u0RxZCyH
\0終端が来るまで確保されていると想定して受け取り側は動作する
だから終端記号がないと色々まずい
(ので、バッファ長も指示する関数が後から増えた)
2019/03/12(火) 09:32:15.05ID:xVickGeK
便乗質問でごめんやけど

delete [] p;
この場合deleteはどうやってサイズ調べてんの?
2019/03/12(火) 09:33:32.91ID:i1gu3hXZ
>>746
char *cpで宣言してるならその計算じゃ配列サイズはとれないよ。
2019/03/12(火) 09:33:42.86ID:u0RxZCyH
要素数の算出は
sizeof(配列) / sizeof(配列[0]) または sizeof(配列) / sizeof(*配列)
ではなかろうか?
2019/03/12(火) 09:47:35.09ID:Nd0ou12Q
除算は遅いからなぁ
2019/03/12(火) 10:18:57.28ID:u0RxZCyH
コンパイル時に確定する値だから
実行時には定数として埋まってるんでないの?
(ほんとんどの環境で インタープリターはしらんw
2019/03/12(火) 10:22:41.05ID:Nd0ou12Q
sizeof(配列)は動的でしょう
2019/03/12(火) 12:15:07.37ID:7lezZ5hH
sizeofは演算子だから動的じゃないかな
最適化で消し飛ぶ可能性はあるのかもしれんけど
2019/03/12(火) 12:42:52.96ID:Gedrqwi7
>>748
実装依存だと思うけど、p[-1]とかに長さが書いてあったりする
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況