在 C 程序中,为什么我会收到 sample.c:(.text+0xb4): undefined reference to `pow 的错误

问题描述

我正在编写一个 C 程序,用于确定一个数字是否为阿姆斯特朗数。 代码如下:

#include <stdio.h>
#include <math.h>
int main(){
    int inp,count,d1,d2,rem;
    float arm;
    printf("the number: ");
    scanf("%d",&inp);

    d1 = inp;
    d2 = inp;
    // for counting the number of digits
    while(d1 != 0){
        d1 /= 10; 
        ++count;
    }
    //for checking whether the number is anarmstrong number or not
    while(d2 != 0){
        rem = (d2 % 10);
        arm += pow(rem,count);
        d2 /= 10;
    }
    printf("%f",arm);
    return 0;

}

文件名:sample.c)

我希望程序将输出显示为:

the number: 

但它显示以下错误

usr/bin/ld: /tmp/ccleyeW0.o: in function `main':
sample.c:(.text+0xb4): undefined reference to `pow'
collect2: error: ld returned 1 exit status

我什至使用了 GCC -o sample sample.c -lm 命令,但仍然出现错误。 所以我想知道是什么导致了这个错误,我该如何解决这个问题。

解决方法

如上面的注释所示,您应该使用 gcc -o sample sample.c -lm 编译您的程序。 -lm 参数确保您的程序链接到数学库。

除此之外,它不仅是好的风格,而且必须在使用它们之前在 C 中初始化变量。在这种情况下,变量 armcount 不会被初始化。特别是 arm 的值肯定会引起麻烦,因为当您运行程序时,它会具有其分配的内存位置处的任何值(垃圾值),这会导致非确定性行为。将两个变量初始化为 0 应该可以修复您的代码。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...