Существует ли длина буфера по умолчанию для метода 'sprintf'?

Я использовал метод sprintf для форматирования данных в строку, которую я хочу записать в файл, в консольном приложении С++ с использованием VS 2008. Ввод представляет собой конкретное сообщение, которое имеет различные переменные и значения (например: тип «int» и значение « 10' / Введите строку и значение "abc" и т. д.) Когда я отправляю два сообщения, все работает отлично. Но когда я отправляю более двух сообщений, выдается ошибка времени выполнения, говорящая 0xC0000005: Нарушение доступа к местоположению чтения 0xabababab. Почему это происходит? Это потому, что метод 'sprintf' имеет длину буфера по умолчанию? Как я могу преодолеть эту проблему?


person Isuru    schedule 31.03.2010    source источник
comment
Вам нужно показать нам фактический код, ваше объяснение неясно (достаточно).   -  person unwind    schedule 31.03.2010
comment
Поскольку в нем нет тега C, но есть тег с C++, рассматривали ли вы вместо этого использование строковых потоков? С ними намного сложнее получить AV.   -  person sbi    schedule 31.03.2010


Ответы (2)


Нет, стандартного размера нет. Он будет считать, что места достаточно, и напишет столько, сколько указано в строке форматирования.

Ваше нарушение прав доступа говорит чтение, что намекает на то, что с вашими аргументами может быть что-то не так, возможно, они не соответствуют строке форматирования.

Вам нужно иметь ровно столько аргументов, надлежащих типов и в правильном порядке, сколько вы ссылаетесь, используя %-коды в строке форматирования.

person unwind    schedule 31.03.2010

Кстати, вы можете заглянуть на эту страницу. .

0xABABABAB : используется Microsoft HeapAlloc() для пометки защитных байтов «ничейной земли» после выделенной памяти кучи.

person sunside    schedule 08.06.2010