微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么我的函数会产生“冲突类型”错误?

如何解决为什么我的函数会产生“冲突类型”错误?

我尝试不看C语言书就复制了atof()函数,我写了它,每一行代码似乎都是正确的,但是当我编译程序时,它告诉我存在冲突类型错误

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

float atof(char s[]); // the error is produced here

int main()
{
    char line[100] = "672";
    float num = atof(line);

    printf("%f",num);
    return 0;
}

// I didn't finish the function yet...
float atof(char s[])
{
    int i,sign;
    float n;
    for(i = 0; s[i] == ' '; i++)  // skip white spaces
        ;
    // set sign to the -1 if it is negative,1 if else
    sign = (s[i] == '-') ? -1 : 1;
    if(s[i] == '+' || s[i] == '-')
        i++;
    for(n = 0.0; isdigit(s[i]); i++)
    {
        n = 10.0 * n + (s[i] - '0');
    }
    return n * sign;
}

我尝试过的事情:

  • 我以为出现问题是因为该函数已经存在于我所包含的其中一个库中,所以我将其名称更改为strtof(),问题还是一样。
  • 我尝试改为更改函数的类型,但问题仍然存在。
  • 我尝试返回浮点数return 2.5F和双精度return 2.5,但这并不能解决问题。

(顺便说一句我使用gcc编译器版本9.2.0)

解决方法

我认为发生此问题是因为该函数已存在于我所包含的一个库中,因此我将其名称更改为strtof(),并且问题相同。 >

您快到了:strtof()atof()都是您平台的库函数。使用类似my_strtof()my_atof()的东西。

参考:

和它们都是标准的C库函数。

,

C标准已经在标题atof中包含名称为<stdlib.h>的函数。

它被声明为

#include <stdlib.h>
double atof(const char *nptr);

因此,您的函数声明与具有相同名称的C标准函数声明冲突。

您需要重命名功能。

并使用限定符const声明参数,方法与声明标准函数的参数相同。

还要注意,您的功能中有错字。

代替此语句中的赋值

sign = (s[i] = '-') ? -1 : 1;

应该有比较

sign = (s[i] == '-') ? -1 : 1;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。