在C中从整数转换为字符串

use*_*895 0 c

我想将一个整数转换为C中的字符串.我尝试了以下代码,但程序不断输出一个9位数字.有人知道什么是错误,我该如何解决?

int num = 158;
char str[5];
sprintf(str, "%d" ,num);
printf("The result is: %d" , sprintf);
Run Code Online (Sandbox Code Playgroud)

谢谢!

Mar*_*rri 6

要么用%d打印整数

printf("The result is: %d\n", num);
Run Code Online (Sandbox Code Playgroud)

或%s的字符串表示

printf("The result is: %s\n" , str);
Run Code Online (Sandbox Code Playgroud)

通过做

printf("The result is: %d" , sprintf);
Run Code Online (Sandbox Code Playgroud)

您正在打印函数sprintf的地址的十进制表示.例:

#include <stdio.h>
int main() {
int num = 158;
char str[5];
sprintf(str, "%d" ,num);
printf("The result is: %d\n", sprintf);
printf("The result is: %8x\n", sprintf);

}
Run Code Online (Sandbox Code Playgroud)

静态编译,以便更容易找到sprintf的地址.

?  ~ [4] [Thu 13] $ gcc file.c -o bin -static
Run Code Online (Sandbox Code Playgroud)

在代码中,我还打印十六进制表示,这更容易在二进制文件中找到.输出:

The result is: 4200768
The result is:   401940
Run Code Online (Sandbox Code Playgroud)

您实际上可以检查ELF可执行文件中sprintf的线性地址:

?  ~ [4] [Thu 13] $ nm bin | grep sprintf
0000000000480830 W asprintf
0000000000480830 T __asprintf
0000000000480830 T ___asprintf
0000000000401940 T _IO_sprintf
0000000000480a40 T _IO_vasprintf
00000000004019d0 T __IO_vsprintf
00000000004019d0 T _IO_vsprintf
0000000000401940 T sprintf
0000000000401940 T __sprintf
0000000000480a40 W vasprintf
00000000004019d0 W vsprintf
Run Code Online (Sandbox Code Playgroud)

正如所料,0x0000000000401940.