我想将一个整数转换为C中的字符串.我尝试了以下代码,但程序不断输出一个9位数字.有人知道什么是错误,我该如何解决?
int num = 158;
char str[5];
sprintf(str, "%d" ,num);
printf("The result is: %d" , sprintf);
Run Code Online (Sandbox Code Playgroud)
谢谢!
要么用%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.