私の大学は、プログラマーとして次C
のドキュメントから学ぶようにアドバイスしてくれました。 Java
J. Maassen 著。
C
46 ページ (PDF-page 47) で、Maassen はのstrcpy
関数の独自のバージョンを実装しようとしています。my_strcpy
char *my_strcpy(char *destination, char *source)
{
char*p = destination;
while (*source != '\0')
{
*p++ = *source++;
}
*p = '\0';
return destination;
}
この機能を使ってプログラムを書いてみました。
45 ページ (PDF-46 ページ) をご覧ください。ここで、Maassen は a -メソッドの最初のバージョンを紹介しましたstrcpy
。彼は を含めstdio.h
てコピーstrA
しましたstrB
。
それで、次のプログラムは動くはずですよね?
#include <stdio.h>
char strA[80] = "A string to be used for demonstration purposes";
char strB[80];
int main(void)
{
my_strcpy(strB, strA);
puts(strB);
}
char *my_strcpy(char *destination, char *source)
{
char*p = destination;
while (*source != '\0')
{
*p++ = *source++;
}
*p = '\0';
return destination;
}
まあ、実際にはそうではありません。
このプログラムをコンパイルするたびに、次のエラーが発生するためです。
PROGRAM.c:12:7: error: conflicting types for ‘my_strcpy’
char *my_strcpy(char *destination, char *source)
^
PROGRAM.c:8:5: note: previous implicit declaration of ‘my_strcpy’ was here
mystrcpy(strB, strA);
^
このプログラムが機能しないのはなぜですか? つまり、うまくいくはずですよね?
私はここstrcpy
で関数の同様の実装を見てきました。そして、その実装も機能していません! 私は同じエラーが発生しています!
どうしたの?