Есть ли длина буфера по умолчанию для метода sprintf? - PullRequest
0 голосов
/ 31 марта 2010

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

Ответы [ 2 ]

1 голос
/ 09 июня 2010

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

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

1 голос
/ 31 марта 2010

Нет, размер по умолчанию отсутствует. Предполагается, что места достаточно, и записывается столько, сколько указано строкой форматирования.

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

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

...