C 在Linux中尝试使用ltoa编译代码时引发错误
当我试图编译如下所示的代码时,我遇到了编译错误C 在Linux中尝试使用ltoa编译代码时引发错误,c,C,当我试图编译如下所示的代码时,我遇到了编译错误 #include <stdlib.h> main() { int val = 10; char buff[10]; char *ptr; ptr = ltoa(val,buff,10); printf("The val is %s\n",buff); } 请让我知道如何解决这个问题。谢谢和问候。是itoa,而不是ltoa。只要更改调用就可以了。它是itoa()而不是ltoa(),但即使itoa
#include <stdlib.h>
main()
{
int val = 10;
char buff[10];
char *ptr;
ptr = ltoa(val,buff,10);
printf("The val is %s\n",buff);
}
请让我知道如何解决这个问题。谢谢和问候。是
itoa
,而不是ltoa
。只要更改调用就可以了。它是itoa()
而不是ltoa()
,但即使itoa()
也不是标准的库函数。如果您希望您的程序是可移植的,请在C99中使用
sprintf()
或snprintf()
。请参阅
Arrgghh C/C++!看起来itoa()不是ANSI C标准,也不起作用
在Linux上使用GCC(至少是我正在使用的版本)。这类事情令人沮丧,尤其是如果您希望您的代码在不同的平台(Windows/Linux/Solaris/任何平台)上工作。C没有
itoa
或ltoa
函数,C有atoi
函数将指向int
表示的字符串转换为字符串
如果要使用该功能,必须实现它。正确。您收到的编译器警告具有误导性;它不知道ltoa是什么,所以假设它返回一个整数。这可能导致您假设
ltoa
返回int
。真正的错误在链接器中,它解释说在任何可用代码中都找不到函数ltoa
,itoa
出现在stdlib.h
中的可能性很小。你真的应该改用sprintf。令人沮丧的是,当有更干净、普遍可移植的替代品时,所有面向Windows的糟糕书籍、教程和示例都会教你像itoa
这样虚假的不可移植的东西。
[mcanj@varaprada ~]$ cc -g samp2.c
samp2.c: In function `main':
samp2.c:8: warning: assignment makes pointer from integer without a cast
samp2.c:11:2: warning: no newline at end of file
/tmp/ccifnKFx.o(.text+0x23): In function `main':
/home/mcanj/samp2.c:8: undefined reference to `ltoa'
collect2: ld returned 1 exit status.
Portability
This function is not defined in ANSI-C and is not part of C++, but is
supported by some compilers.