私の大学は、プログラマーとして次Cのドキュメントから学ぶようにアドバイスしてくれました。 JavaJ. Maassen 著。
C46 ページ (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で関数の同様の実装を見てきました。そして、その実装も機能していません! 私は同じエラーが発生しています!
どうしたの?