Либо вы печатаете число с% г
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
Вы действительно можете проверить линейный адрес Sprintf в ELF исполняемый файл:
➜ ~ [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.
about about: 'printf (" Результат:% d ", num);' –
Ну, вы хотите напечатать 'str' (не' sprintf') с '% s' (не'% d'). Разве ваш компилятор не предупреждает вас о 'sprintf'? –
Кроме того, в вашем случае может быть достаточно 4 символов (плюс нулевой ограничитель), но это не для произвольных 'int'. Возможно, вы хотите настроить размер буфера на 12 (для обслуживания -2147483648), а также использовать 'snprintf', чтобы избежать переполнения буфера. –