我正在使用该itoa()函数转换int为string,但它给出了一个错误:
undefined reference to `itoa'
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
是什么原因?还有其他方法可以执行此转换吗?
Edw*_*uck 71
使用snprintf,比它便携itoa.
itoa不是标准C的一部分,也不是标准C++的一部分 ; 但是,许多编译器和相关库都支持它.
例子 sprintf
char* buffer = ... allocate a buffer ...
int value = 4564;
sprintf(buffer, "%d", value);
Run Code Online (Sandbox Code Playgroud)
例子 snprintf
char buffer[10];
int value = 234452;
snprintf(buffer, 10, "%d", value);
Run Code Online (Sandbox Code Playgroud)
两个函数都类似fprintf,但输出被写入数组而不是流.sprintf和之间的区别snprintf是snprintf通过写入可以存储在的最大字符数来保证没有缓冲区溢出buffer.
在继续之前,我必须警告你,这itoa不是ANSI函数 - 它不是标准的C函数.您应该使用sprintf将int字符串转换为字符串.
itoa 有三个论点.
char *变量,程序可能会崩溃,所以你应该传入一个正常大小的char数组,它会正常工作.该函数返回一个指向其第二个参数的指针 - 它存储了转换后的字符串.
itoa是一个非常有用的功能,一些编译器支持它 - 很遗憾它不是所有人都支持,不像atoi.
如果您仍想使用itoa,请在此处使用它.否则,您有另一个选项使用sprintf(只要你想要基数8,10或16输出):
char str[5];
printf("15 in binary is %s\n", itoa(15, str, 2));
Run Code Online (Sandbox Code Playgroud)
用途snprintf-每个编译器都有标准配置。通过使用NULL, 0参数调用查询其所需的大小。最后再为空分配一个字符。
int length = snprintf( NULL, 0, "%d", x );
char* str = malloc( length + 1 );
snprintf( str, length + 1, "%d", x );
...
free(str);
Run Code Online (Sandbox Code Playgroud)