在 gcc 中链接标准头文件时出错

在 gcc 中链接标准头文件时出错

我有一个简单的代码 - 它在其他平台上有效,但在 ubuntu 上无效。

#include <stdio.h>
#include <stdlib.h>
int main()
{
int x=99;
char str[100];
itoa(99, str, 10);
return 0;
}

尝试使用 gcc 中的终端进行编译:

gcc test.c

但我收到了错误:

/tmp/ccJN77g6.o: In function `main':
test.c:(.text+0x35): undefined reference to `itoa'
collect2: ld returned 1 exit status

为什么这样? itoa 的原型包含在 stdlib.h 中

答案1

itoa似乎不是 ANSI C++,因此很可能不受 gcc 支持。

根据此来源,建议采用以下解决方法:

该函数未在 ANSI-C 中定义,也不是 C++ 的一部分,但受到某些编译器的支持。

某些情况下符合标准的替代方案可能是 sprintf:

    sprintf(str,"%d",value) 转换为十进制数。
    sprintf(str,"%x",value) 转换为十六进制数。
    sprintf(str,"%o",value) 转换为八进制数。

sprintf可以找到参考这里

答案2

itoa函数不可移植、非标准并且大多数 Linux 编译器不支持它。

相反你应该使用snprintf()函数

检查打印函数参考这里

#include <stdio.h>
#include <stdlib.h>
int main()
{
int x=99;
char str[100];
// itoa(99, str, 10);
snprintf(str,10,"%d", x);
return 0;
}

答案3

我使用了您输入的代码,但出现了同样的错误。看来 itoa() 不是 ANSI C 标准,并且无法与 Linux 上的 GCC 配合使用(至少是我使用的版本)。这样的事情令人沮丧,尤其是当您希望代码在不同平台(Windows/Linux/Solaris/其他平台)上运行的时候。

它不是标准 C 函数。以下链接可能有助于您开始找到绕过该函数的方法:

链接1 堆栈溢出问题

希望能帮助到你。

相关内容