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

标签 c

我想在 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/

相关文章:

java - 如何跨文件版本存储文件增量?

c - 通过代码运动优化C代码

c - 我似乎不知道如何使用 strcat 连接两个 char 指针字符串,这不正确吗?

c - 为什么内存地址在一个地方上升而在另一个地方下降?

c - SOCK_RAW 数据包不发送特定源地址

java - JNA 内存泄漏

c - .h 文件中声明的函数在哪里找到它的定义?

c - 混合 C 和汇编

c - 在 c 中获取进程 Cpu 使用情况

c - 如何确定二维数组中的2个元素是否相邻?