標籤:

《C++ Primer 5th》中like-vector class的一個問題?

謝謝各位大大在回答以及評論里為我釋疑,這個問題已經解決(雖然稱不上是「技術上的解決」),現在可以正常運行並且得出結果了。這次提問讓我意識到自己知識的欠缺和描述問題的不足(檢討書範文,敲黑板),以後提問時我會儘可能重現問題,以免拉低知乎的平均水平orz...

能正確運行後真的很開心,這鼓勵我在C++這條不歸路(嗯?)上越走越遠

總之,再次感謝各位大大,完結撒花^_^

=========================我是原提問的分割線============================

我在運行C++Primer第五版的StrVec程序時,編譯報錯,截圖如下:

推測是這段代碼出了問題:

請問應該怎麼改正?

注1:編譯環境為VS2013

注2:知乎不方便上傳源代碼,請大大諒解,我盡量提供更多信息,謝謝!


注2:知乎不方便上傳源代碼,請大大諒解,我盡量提供更多信息,謝謝!

上來問問題,題主你當然有義務提供一個小的、可方便重現問題的代碼,沒人會想看你一大堆代碼裡面出問題的一小塊到底是怎麼回事。

根據MSDN,應該是你調用了一個微軟認為不安全的函數:傳進一個指針用來獲取數據的同時,函數卻不提供一個讓你指明這個指針到底有效長度有多長的函數。這樣當你給的指針不對,程序不會崩潰,這是不好的。所有的代碼都應該寫成,只要是程序員(而不是用戶)犯的錯誤,都應該導致程序立刻掛掉,避免對用戶造成進一步的、更大的損失。

在這種情況下,你再msdn一把,就可以找到一個符合安全規範的函數,然後就用它。譬如說,使用c++ - Issue with using std::copy 提到的技術,用stdext::checked_array_iterator代替指針。


推薦閱讀:

我用的是visual studio 2010 c語言為什麼學了好長時間還是控制台程序和dos窗口啊?
C++ 「==」運算符取值問題?
能不能用c#和c/c++以及其他語言寫一個完整的IDE(類似visual studio)?
github 上有哪些遊戲或者遊戲開發相關的炫酷的user或者repo?

TAG:C | CC | CPrimer |