掲示板ランキング  その他のコミック(Gファンタジーコミックス)


掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板1

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧

No.6650

領域破壊について
投稿者---kit(2006/10/14 22:21:25)


お世話になります。
関数(jiw)内で宣言したchar we[3];の配列の要素をchar we[2];に変更するとなぜか領域破壊が起こってうまく画面に表示されません。
私の認識ではchar we[2];に変更してもstrcpy(we,"WW");は配列の要素0番目(we[0])にW、要素1番目(we[1])にW、要素2番目(we[2])に'\0'が入り要素3番目(we[3])の領域を触っていないためchar we[2];にしても領域破壊が起こるはずがないという認識です。
しかし現実として領域破壊が実際にchar we[3];をchar we[2];に変更するとおこっております。なぜ領域破壊がおこっているのか教えていただけませんか?OSとコンパイラは下記となっております。
OS Windos2000
コンパイラ BorlandC++
またソースは下記となっております。
#include <stdio.h>
#include <string.h>

void jiw(char *);

int main(void){

char p[10];

strcpy(p,"kkkji");

jiw(p);
printf("%s\n",p);
return 0;
}

void jiw(char *p){
char we[2];
strcpy(we,"WW");
strncpy(p,we,1);
printf("%s\n",p);
}
宜しければご教授下さい。(. .)ぺこり


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:領域破壊について 6651 RiSK 2006/10/14 22:27:50
<子記事> Re:領域破壊について 6652 iijima 2006/10/15 14:51:56
<子記事> Re:領域破壊について 6715 kit 2006/11/04 15:59:17


No.6651

Re:領域破壊について
投稿者---RiSK(2006/10/14 22:27:50)


>私の認識ではchar we[2];に変更してもstrcpy(we,"WW");は配列の要素0番目(we[0])にW、要素1番目(we[1])にW、要素2番目(we[2])に'\0'が入り

配列weの有効な添え字は0-1です。
we[2]に書き込むと溢れます。


この投稿にコメントする

削除パスワード

No.6652

Re:領域破壊について
投稿者---iijima(2006/10/15 14:51:56)


> 私の認識ではchar we[2];に変更してもstrcpy(we,"WW");は配列の
> 要素0番目(we[0])にW、
> 要素1番目(we[1])にW、
> 要素2番目(we[2])に'\0'が入り
> 要素3番目(we[3])の領域を触っていないため
> char we[2];にしても領域破壊が起こるはずがないという認識です。

C言語では配列の宣言では「要素数」を指定します。
一部の言語では配列の宣言のときに「要素番号の最大値」を指定するものがあります
ので、それと混同されているのではないでしょうか。

char we[2];

のときに確保される領域はchar型の要素2個分ですから、以下、RiSKさんの回答と同。


この投稿にコメントする

削除パスワード

No.6715

Re:領域破壊について
投稿者---kit(2006/11/04 15:59:17)


お礼のコメントを書いたつもりでしたが、反映されていないのでもう一度記載します。


遅くなりましたがRiSKさん、iijimaさん返信ありがとうございました。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧





掲示板提供:(有)リアル・インテグリティ