Я новичок на этом сайте, поэтому, если я получу что-то не так в своем первом посте, пожалуйста, не беспокойтесь на меня так сильно.wsprintf() сбой моего приложения
Здесь не идет ничего ...
В моем приложении, у меня есть следующий код:
wsprintf(hardware_info, "%ul+%ul", dwGPU, dwCPU);
hardware_info
хранится как LPSTR и передается по ссылке в качестве параметра для функция, которая содержит следующую строку (например void do_something(IN LPSTR out){}
)
dwGPU
и dwCPU
явно DWORD
или ul, unsigned long
.
Когда это приложение выполнено, оно сработает сразу после выполнения вышеуказанной строки кода (обратите внимание, что эта строка не проходит). Может кто-нибудь объяснить мне, в чем проблема?
EDIT:
Я исправил проблему. Я считаю, что это была скорее логическая ошибка. Я смутил %ul
, поскольку я думал, что он стоял за unsigned long
, хотя через некоторые исследования я узнал, что это действительно %lu
, как ни странно.
Благодаря тому, кто внес свой вклад в это, это действительно помогло мне разобраться.
Как объявляется 'hardware_info'? Как вы распределяете память для целевого буфера? – AnT
Я думаю, что я выделил достаточно, предполагая, что максимально возможная длина буфера составляет 64 байта. Я использовал 'memset (hardware_info, 0, 4096);', а затем 'realloc()' '4096 - sizeof (hardware_info)' после заполнения буфера. Я перемещаю это выделение в конец буфера, а затем использую некоторую логику сборки для хранения текущего буфера в недавно выделенный фрейм. Поэтому я не думаю, что это проблема здесь ... Кроме того, я не могу поверить, сколько троллей существует в stackoverflow. Я намеренно говорю «Im new здесь, успокойся на мне», а через несколько секунд я получаю -3 rep по моему первому вопросу ». –
Вы много описываете, но на самом деле не показываете нам код, который выделяет это пространство Для этого просто объявите 'hardware_info' простым буфером буфера, который содержит 1000 символов, - нет фантастической логики, чтобы выяснить, насколько это возможно. Если вы это сделали, произойдет сбой программы ? – PaulMcKenzie