C++ 为什么运行时检查失败2-变量“x”周围的堆栈已损坏?

C++ 为什么运行时检查失败2-变量“x”周围的堆栈已损坏?,c++,mfc,C++,Mfc,这让我快发疯了。我有一个遗留代码,我在下面添加了几个条件。我正在解析字符串并检索数据。这是如何在遗留代码中完成的,因此我没有更改样式 WORD wPSM = 0; double dblPST = 0; WORD wSDB = 0; if(-1 != str.Find("PSM=")) { nNumScanned = sscanf_s((LPCTSTR) str, "PSM=%u", &

这让我快发疯了。我有一个遗留代码,我在下面添加了几个条件。我正在解析字符串并检索数据。这是如何在遗留代码中完成的,因此我没有更改样式

        WORD wPSM = 0;
        double dblPST = 0;
        WORD wSDB = 0;

        if(-1 != str.Find("PSM="))
        {
            nNumScanned = sscanf_s((LPCTSTR) str, "PSM=%u", &wPSM);
        }
        if(-1 != str.Find("PST="))
        {
            nNumScanned = sscanf_s((LPCTSTR) str, "PST=%lf", &dblPST);
        }
        if(-1 != str.Find("SDB="))
        {
            nNumScanned = sscanf_s((LPCTSTR) str, "SDB=%u", &wSDB);
        }
我得到错误运行时检查失败2-变量“wPSM”周围的堆栈已损坏。如果我对这三行进行了注释,则不会出现此错误。str是CString,它确实包含预期值

上面的sscanf_语法是否有问题,可能导致这种情况

注意,这是一个带有VS2010的C++项目,因为一个16位无符号整数,SCANFFYS

< P>,我已经标记了它,因此SCAFFFIs期望一个无符号整数,所以您的程序有未定义的行为。 对于16位无符号整数,在调用sscanf_s时需要%hu修饰符。

,因此程序具有未定义的行为,因为sscanf_s需要无符号整数


在对sscanf_s的调用中需要%hu修饰符。

显示的代码中没有wPST变量。a哪3行?b wPST声明在哪里,它不在您的代码段中,您正在使用%u进行扫描,因此很可能会将32位数据(如果不是64位的话)收集到一个WORD 16位变量中。这些额外的16位将进入堆栈中不属于它们的部分。位OT,但我认为C标记与使用sscanf_s无关。首先,它是一个Windows特定的功能,第二,这是C++代码。修正了WPST引用,抱歉已经缩短了公共帖子的实际名称。在代码中没有WPST变量。哪3行?b wPST声明在哪里,它不在您的代码段中,您正在使用%u进行扫描,因此很可能会将32位数据(如果不是64位的话)收集到一个WORD 16位变量中。这些额外的16位将进入堆栈中不属于它们的部分。位OT,但我认为C标记与使用sscanf_s无关。首先,它是一个Windows特定的功能,第二,这是C++代码。修正WPST参考,抱歉已经缩短了公共职位的实际名称。