据说我们可以写多个声明,但只能写一个定义。现在,如果我使用相同的原型实现自己的 strcpy 函数:
char * strcpy ( char * destination, const char * source );
那我不是在重新定义现有的库函数吗?这不应该显示错误吗?或者它是否与库函数以目标代码形式提供的事实有关?
编辑:在我的机器上运行以下代码会显示“分段错误(核心转储)”。我正在使用 linux 并且在没有使用任何标志的情况下进行了编译。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *strcpy(char *destination, const char *source);
int main(){
char *s = strcpy("a", "b");
printf("\nThe function ran successfully\n");
return 0;
}
char *strcpy(char *destination, const char *source){
printf("in duplicate function strcpy");
return "a";
}
请注意,我不是在尝试实现该功能。我只是想重新定义一个功能并询问后果。
编辑 2:应用 Mats 建议的更改后,程序不再给出分段错误,尽管我仍在重新定义函数。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *strcpy(char *destination, const char *source);
int main(){
char *s = strcpy("a", "b");
printf("\nThe function ran successfully\n");
return 0;
}
char *strcpy(char *destination, const char *source){
printf("in duplicate function strcpy");
return "a";
}