2010-03-31 38 views
0

我使用sprintf方法将数据格式化为一个字符串,我想在使用VS 2008的C++控制台应用程序中写入一个文件。输入是一个特殊的消息,它具有各种变量和值(例如:类型'int'和值'10'/类型字符串和值“abc”等)当我发送两条消息,它完美的作品。但是,当我发送两条以上的消息时,它会给出运行时错误,说0xC0000005:访问冲突读取位置0xabababab。这是为什么发生?是否因为'sprintf'方法有默认的缓冲区长度?我怎样才能克服这个问题?'sprintf'方法是否有默认的缓冲区长度?

+2

您需要向我们展示了实际的代码,你的解释是不明确的(足够的)。 – unwind 2010-03-31 08:49:12

+0

由于这没有'C'标签,但是其中包含一个'C++'标签,您是否考虑过使用字符串流呢?与他们一起获得AV是困难的。 – sbi 2010-03-31 08:58:10

回答

1

不,没有默认大小。它会假定有足够的空间,并且可以按照格式化字符串的指定进行写入。

您的访问违规说阅读,它暗示说您的参数可能有问题,也许它们与格式化字符串不匹配。

在格式化字符串中使用%代码时,您需要具有正确的参数,正确的类型和正确的顺序。

+0

嗨,非常感谢您的帮助。我会重新检查它。 – Isuru 2010-04-01 04:14:00

1

顺便说一句,你可能想看看this page

0xABABABAB:微软的HeapAlloc()用于标记“无人区”保护字节分配后的堆内存

相关问题