我只在
中使用#include <stdio.h>
#include <stdio.h>
void strcat(char* s, char* t);
int main()
{
char str1[12] = "hello";
char str2[] = ",world";
strcat(str1, str2);
printf("%s\n", str1);
return 0;
}
void strcat(char* s, char* t)
{
int i = 0, j = 0;
while(*s != '\0')
i++;
while((*(s + i++) = *(t + j++)) != '\0');
}
但是当我构建它时,控制台输出:
--------------------Configuration: test16 - Win32 Debug--------------------
Linking...
LIBCD.lib(strcat.obj) : error LNK2005: _strcat already defined in test16src.obj
为什么呢? strcat
中是否存在stdio.h
?
PS: 您能否通过描述与其他文件链接时的进度来解释链接错误?
答案 0 :(得分:6)
strcat
是一个C库函数。请参阅man strcat
或POSIX(or here fo windows)或string.h
(POSIX)。
因此符号strcat
在标准C库中使用(此处为LIBCD),它在链接阶段自动链接到程序,您将显示出现的错误。
错误通知您由编译源创建的目标文件strcat
定义的符号test16src.o
已存在于链接到test16src.o
的标准库(LIBCD)中以创建最终的可执行文件。
绕过此符号名称冲突会为您的实现使用不同的名称,例如my_strcat()
。