Я использовал метод sprintf для форматирования данных в строку, которую я хочу записать в файл, в консольном приложении С++ с использованием VS 2008. Ввод представляет собой конкретное сообщение, которое имеет различные переменные и значения (например: тип «int» и значение « 10' / Введите строку и значение "abc" и т. д.) Когда я отправляю два сообщения, все работает отлично. Но когда я отправляю более двух сообщений, выдается ошибка времени выполнения, говорящая 0xC0000005: Нарушение доступа к местоположению чтения 0xabababab. Почему это происходит? Это потому, что метод 'sprintf' имеет длину буфера по умолчанию? Как я могу преодолеть эту проблему?
Существует ли длина буфера по умолчанию для метода 'sprintf'?
Ответы (2)
Нет, стандартного размера нет. Он будет считать, что места достаточно, и напишет столько, сколько указано в строке форматирования.
Ваше нарушение прав доступа говорит чтение, что намекает на то, что с вашими аргументами может быть что-то не так, возможно, они не соответствуют строке форматирования.
Вам нужно иметь ровно столько аргументов, надлежащих типов и в правильном порядке, сколько вы ссылаетесь, используя %
-коды в строке форматирования.
person
unwind
schedule
31.03.2010
Кстати, вы можете заглянуть на эту страницу. .
0xABABABAB : используется Microsoft HeapAlloc() для пометки защитных байтов «ничейной земли» после выделенной памяти кучи.
person
sunside
schedule
08.06.2010
C
, но есть тег сC++
, рассматривали ли вы вместо этого использование строковых потоков? С ними намного сложнее получить AV. - person sbi   schedule 31.03.2010