2010-03-31 66 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()用於標記「無人區」保護字節分配後的堆內存

相關問題