我想在 C 中将整数转换为字符串。我尝试了以下代码,但程序不断输出一个 9 位数字。请问有人知道错误是什么吗?我该如何解决?
int num = 158;
char str[5];
sprintf(str, "%d" ,num);
printf("The result is: %d" , sprintf);
谢谢!
最佳答案
要么用 %d 打印整数
printf("The result is: %d\n", num);
或带 %s 的字符串表示
printf("The result is: %s\n" , str);
通过做
printf("The result is: %d" , sprintf);
您正在打印函数 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);
}
为了更容易定位到sprintf的地址,静态编译
➜ ~ [4] [Thu 13] $ gcc file.c -o bin -static
在代码中,我还打印了十六进制表示,在二进制文件中更容易定位。输出:
The result is: 4200768
The result is: 401940
实际上你可以在 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
正如预期的那样,0x0000000000401940。
关于在C中从整数转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26903750/