"未定义参考"同一文件中C函数的错误

时间:2016-03-21 01:07:49

标签: c

刚刚学习如何在C中使用指针并在声明使用指针作为参数的函数时出错?

#include <stdio.h>

int a[10];

int strlen(const char *str);

int main(){
    printf("%d", strlen("This works"));
    return 0;
}
int strlen(char *s){
    int n;
    for (n = 0; *s != '\0'; s++)
        n++;
    return n;
}

编译时收到以下错误

Undefined reference to 'strlen(char const*)'

1 个答案:

答案 0 :(得分:4)

在声明中,您有

int strlen(const char *str); 

然而,在定义中,它变为

int strlen(char *s){

注意区别?为了使你的代码有效,你必须使定义和声明相同,否则你会得到一个错误,因为链接器找不到int strlen(const char *str);的定义

要修复此错误,请将声明更改为

int myStrlen(const char *str); 

的定义
int myStrlen(const char *s){

再试一次。

由于strlen()是C库函数,因此不应使用此名称。另外,我说“再次尝试”,而不是“它工作”,因为我们没有使用相同的编译器,所以我不确定这是否会解决你的实施问题。如果您使用C ++编译器来编译此代码,则最好使用C编译器,因为C和C ++是单独的语言。