落書きノート

ふと自分が気になった事を書いてます

C言語 strcpy関数の自作

Macでstrcpy関数をポインタを使って実装しようとするとなぜかできませんでした。Ubuntuはどうだろうということで、試してみたらできました。

#include <stdio.h>

void strcpy2(char *s, char *t){
    int i = 0;

    while((s[i] = t[i]) != '\0')
      i++;
}

void strcpy3(char *s, char *t){
    while((*s = *t) != '\0'){
      s++;
      t++;
    }
}

void strcpy4(char *s, char *t){
    while((*s++ = *t++) != '\0')
      ;
}

void strcpy5(char *s, char *t){
    while(*s++ = *t++)
      ;
}

void strcpy6(char *s, char *t){
    *s = *t;
}

void strcpy7(char *s, char *t){
    s = t;
}

int main(void){
  char a[] = "abcdef";
  char b[] = "efefef";

  strcpy2(a,b);
  strcpy3(a,b);
  strcpy4(a,b);
  strcpy5(a,b);
  strcpy6(a,b);
  strcpy7(a,b);
  
  printf("%s\n", a);
  printf("%s\n", b);

  return 0;
}

このうち、strcpy6とstrcpy7がコピーできませんでした。試してよかった…。危うく解けない問題だと思うところでした。

*追記

Macでも警告が出るものの一応出来ました。恐らく前と違うプログラムの組み方をしていたので出来たのでしょう。