C言語で以下のようなstrcpy関数を使った文字列のコピーを自作関数で実装したい。
C
1#include <stdio.h> 2#include <string.h> 3 4int main(void) { 5 char str1[16] = "Hello World!"; 6 char str2[16]; 7 8 // 文字列のコピー 9 strcpy(str2, str1); 10 printf("str2の文字列は: %s\n", str2); 11 12 return 0; 13}
途中までのコード
自分で以下のようなコードを考えたのですが、
コピー先に終端文字が入っていないなど若干問題点があるとおもいます
どう修正すればいいでしょうか。
c
1#include <stdio.h> 2#include <stdlib.h> 3 4void *strcpy(char *dst, char *src){ 5 int i=0; 6 for(i=0;src[i]!='\0';++i){ 7 dst[i]=src[i]; 8 } 9} 10 11int main(void){ 12 char str[10]="Hello!"; 13 //char str2[10]; 14 strcpy(str+1,str); 15 printf("%s\n",str); 16 17 return 0; 18}
本題ではありませんが、
標準ライブラリ関数のstrcpyではコピー元とコピー先の領域が重なっている場合の動作は未定義だったかと思います。
作った関数に怪しいふるまいがあるかどうかは別の話として、本家strcpyと同じ動作をするかどうかを議論するなら本家strcpyに許されていないテスト条件を持ち出しても仕方がないでしょう。
//char str2[10];
strcpy(str+1,str);
なぜ、str2 を str+1 に変えたのか説明してください。
回答3件
あなたの回答
tips
プレビュー