【发布时间】:2014-03-09 02:48:21
【问题描述】:
我在一个大型代码库上运行了 Visual Studio 中的代码分析器,我收到了大约十亿个这样的错误:
warning C6284: Object passed as parameter '3' when string is required in call to 'fprintf'
根据http://msdn.microsoft.com/en-us/library/ta308ywy.aspx“这个缺陷可能会产生不正确的输出或崩溃。”然而,我的同事表示,我们可以忽略所有这些错误而不会出现任何问题。所以我的一个问题是,我们是否需要对此采取任何措施,或者我们可以保持原样吗?
如果需要解决这些错误,最好的解决方法是什么?
这样可以吗:
static_cast<const char*>(someCString)
对此有更好或更正确的方法吗?
以下行会生成此警告:
CString str;
fprintf(pFile, "text %s", str);
【问题讨论】:
-
向我们展示一个发出此警告的调用站点,其中包含所涉及变量的完整声明。
-
你查看过成员方法
GetBuffer(int minBufferLength )吗?它返回一个空终止的LPSTR,我相信它与char*基本相同,但是它不是const。在这里阅读更多:msdn.microsoft.com/en-us/library/aa314880(v=vs.60).aspx -
MS 支持与否,这是一种糟糕的做法,我希望你的同事宣传它。我还没有看到 MS 特别 说这样做很好,而且实际上他们的文档特别说要转换为
LPCTSTR以触发转换运算符。他们的实施“支持”它;为他们求婚。无论他们是否愿意承认,语言标准都胜过他们。如果有标准的小节表明这是合规的,我还没有看到它。 -
您如何看待@xMRi 建议的
GetString()method?
标签: c++ mfc portability cstring printf