C言語のmemcpyの自作関数について
以下のようなmemcpyのコードを作り実行するとちゃんとコピーできることを確認できたのですが
c
1#include <stdio.h> 2#include <string.h> 3 4void* memcpy(void *dst,const void *src,size_t n){ 5 size_t i; 6 char *p1=dst; 7 const char *p2=src; 8 9 for(i=0;i<n;++i){ 10 *p1=*p2; 11 ++p1; 12 ++p2; 13 } 14 return dst; 15} 16 17int main(void){ 18 char buf[]={0,1,2,3,4}; 19 char buf2[5]; 20 21 memcpy(buf2,buf,sizeof(buf)); 22 23 for(int i=0;i<sizeof(buf2);++i){ 24 printf("%d\n",buf2[i]); 25 } 26 27 return 0; 28}
以下のような文字列のコピーするコードでは
c
1#include <stdio.h> 2#include <string.h> 3 4void* memcpy(void *dst,const void *src,size_t n){ 5 size_t i; 6 char *p1=dst; 7 const char *p2=src; 8 9 for(i=0;i<n;++i){ 10 *p1=*p2; 11 ++p1; 12 ++p2; 13 } 14} 15 16int main(void){ 17 char buf[]="Hello"; 18 char buf2[6]; 19 20 memcpy(buf2,buf,sizeof(buf)); 21 22 for(int i=0;i<sizeof(buf2);++i){ 23 printf("%d\n",buf2[i]); 24 } 25 26 return 0; 27}
結果は以下のようになりました
これはなぜこうなるのでしょうか。両方コピーできるようなコードにしたいのですが。どうすればよいのでしょうか。ぜひご教授願います。
c
172 2101 3108 4108 5111 60
回答3件
あなたの回答
tips
プレビュー