mozuraのプロフィール
- ベストアンサー数
- 1
- ベストアンサー率
- 100%
- お礼率
- 0%
- 登録日2008/07/04
- 書き換え
「startで示されるアドレスからlengthバイト分だけの領域に関して、値valで埋める関数cmemset(char *start,char value,int length)を作成し、malloc()を使ってメモリ領域を確保し、cmemset()が動作することを確認(メモリ領域の内容を整数値として表示)するプログラム」↓ #include <stdio.h> #include <stdlib.h> // char 型エリア対応のmemset関数 // length バイト分の連続エリアを初期化する char* cmemset(char *start,char value,int length){ __char__*p; __p_=_start; __while_(length_>_0)_{ ____*p++_=_start; ____length_-=_1; __} __return_start; } int_main(){ __char__x[9]; __char__*z; __char__ini=0x7f; __int___k; __//_静的配列 __printf("cmemset(x,'0',9);\n"); __cmemset(x,'0',9); __printf("x[9]="); __for(k=0;k<9;k++)_printf("%3d",x[k]); __printf(":_by_%%3d\n"); __//_動的配列 __z_=_(char*)malloc(9); __printf("cmemset(z,'0',9);\n"); __cmemset(z,'0',9); __printf("z[9]="); __for(k=0;k<9;k++)_printf("%3x",z[k]); __printf(":_by_%%3x\n"); __return_0; } /* 出力: cmemset(x,'0',9); x[9]= 48 48 48 48 48 48 48 48 48: by %3d cmemset(z,'0',9); z[9]= 30 30 30 30 30 30 30 30 30: by %3x */ を「srcで示されるアドレスからlengthバイト分だけの領域を、destで示される領域へコピーする関数cmemmove(char *dest, char *src, int length)を作り、malloc()を使ってメモリ領域を確保し, smemmove()が正確に動作することを確認(メモリ領域の内容を整数値として表示)するプログラム」に書き換えたいのですが、 違っているのは、オーバーラップしていても動作するようにする部分で、オーバーラップでの正常動作を全ての場合で保障する方法は、一度テンポラリ領域を設けてそこにデータを退避してから、退避エリア>dstへのコピーという二段階の処理が必要だということはなんとなくわかるのですが、どう書けばいいのかわかりません。どなたか助けて下さい。