为什么“strcat已在***。obj中定义”?

时间:2014-01-15 12:01:44

标签: c error-handling stdio strcat

我只在

中使用#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:   您能否通过描述与其他文件链接时的进度来解释链接错误?

1 个答案:

答案 0 :(得分:6)

strcat是一个C库函数。请参阅man strcatPOSIXor here fo windows)或string.hPOSIX)。

因此符号strcat在标准C库中使用(此处为LIBCD),它在链接阶段自动链接到程序,您将显示出现的错误。

错误通知您由编译源创建的目标文件strcat定义的符号test16src.o已存在于链接到test16src.o的标准库(LIBCD)中以创建最终的可执行文件。

绕过此符号名称冲突会为您的实现使用不同的名称,例如my_strcat()