gpt4 book ai didi

c++ - Q_ASSERT - "Incorrect format specifier"

转载 作者:行者123 更新时间:2023-11-28 07:25:39 26 4
gpt4 key购买 nike

我有一个Q_ASSERT():

Q_ASSERT(QString("%1").arg(0) != "0");

当它失败时,它显示一个中止/重试/忽略消息框,但在文本中它说:

File: f:\dd\vctools\crt_bld\self_x86\crt\src\output.c
Line: 1120
Expression: ("Incorrect format specifier", 0)

有了这个调用栈:

0   _output_s_l output.c    1120    0x5dbee38d  
1 _vsnprintf_helper vsprintf.c 140 0x5dbb00e8
2 _vsnprintf_s_l vsprintf.c 288 0x5dbb0610
3 _vsnprintf_s vsprintf.c 340 0x5dbb0880
4 _VCrtDbgReportA dbgrptt.c 301 0x5dc2571e
5 _CrtDbgReportV dbgrpt.c 241 0x5dc24992
6 _CrtDbgReport dbgrpt.c 258 0x5dc2494b
7 qt_message_output qglobal.cpp 2232 0x5d43bacf
8 qt_message qglobal.cpp 2298 0x5d43bc69
9 qFatal qglobal.cpp 2481 0x5d43c059
10 qt_assert qglobal.cpp 1999 0x5d43b629

但是如果我把它改成:

Q_ASSERT(QString("0").arg(0) != "0");

它按预期工作,显示

File: global\qglobal.cpp
Line: 2232

ASSERT: "QString("0").arg(0) != "0"" in file ..\MyProject\tester.cpp, line 132

那么为什么会出现这种奇怪的行为,这是 Qt 中的错误吗?

最佳答案

原来是Qt的bug,在qt_message_output他们有这条线:

int ret = _CrtDbgReport(_CRT_ERROR, __FILE__, __LINE__, QT_VERSION_STR, buf);

应该是

int ret = _CrtDbgReport(_CRT_ERROR, __FILE__, __LINE__, QT_VERSION_STR, "%s", buf);

他们将 Q_ASSERT() 中包含的整行作为格式说明符传递。

关于c++ - Q_ASSERT - "Incorrect format specifier",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18786086/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com