トップページ > プログラム > 2015年02月01日 > ofkZJOEV

書き込み順位&時間帯一覧

8 位/196 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000001130000000005



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
【初心者歓迎】C/C++室 Ver.94【環境依存OK】 [転載禁止]©2ch.net

書き込みレス一覧

【初心者歓迎】C/C++室 Ver.94【環境依存OK】 [転載禁止]©2ch.net
800 :デフォルトの名無しさん[sage]:2015/02/01(日) 12:49:21.99 ID:ofkZJOEV
一次元配列のメモリ領域の一部分を借りて変数の配列にしてるんだから、
配列外にアクセスしたら別の変数にアクセスしてしまう場合もあるわな
【初心者歓迎】C/C++室 Ver.94【環境依存OK】 [転載禁止]©2ch.net
802 :デフォルトの名無しさん[sage]:2015/02/01(日) 13:02:28.61 ID:ofkZJOEV
> ってやると、 A \0 \0 って3文字分メモリを取って
解読してくれよエスパー
【初心者歓迎】C/C++室 Ver.94【環境依存OK】 [転載禁止]©2ch.net
809 :デフォルトの名無しさん[sage]:2015/02/01(日) 14:08:25.74 ID:ofkZJOEV
>>807
どっちも 'A'と'\0'の2バイトをコピーするよ、
ただしstrcpyはコピー先の確保メモリ数なんて考慮しないから、
下の方は確保領域外であるa[0]の次に'\0'を書き込んじゃうのでよろしくない
【初心者歓迎】C/C++室 Ver.94【環境依存OK】 [転載禁止]©2ch.net
812 :デフォルトの名無しさん[sage]:2015/02/01(日) 14:41:54.37 ID:ofkZJOEV
>>811
いや、違う
配列外が'\0'になってるのはOSがよろしくやってくれてるだけで、
環境が違えばメモリ確保領域外にゴミデータが入ってる事なんてよくある、
メモリ確保領域外がすべて0クリアされてる前提でコードを組むのは環境依存になるし、お作法的にもやっちゃダメ

> その領域を使ってた変数などが先頭が\0になって壊れると言う事ですね。
こっちも、変数のフラグメンテーションによって配列外アクセスが常に別の変数の先頭領域になるなんて保障がないよ
【初心者歓迎】C/C++室 Ver.94【環境依存OK】 [転載禁止]©2ch.net
813 :デフォルトの名無しさん[sage]:2015/02/01(日) 14:48:51.05 ID:ofkZJOEV
あ、ちなみに、配列内なら初期値以降が0クリアされるって言語仕様で決められてるよ

例えば
int a[3] = {0};
だと、a[0] == 0、a[1] == 0、a[2] == 0

int a[3] = {5, 2};
だと、a[0] == 5、a[1] == 2、a[2] == 0

char a[3] = "A";
だと、a[0] == 'A'、a[1] == '\0'、a[2] == 0('\0')


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。