微软特有的sntscanf功能运行异常
我不太确定特定于Microsoft的功能应该如何工作 在我的Visual Studio 2015(14.0.25431.01更新3)上,使用v140工具包编译的以下程序的输出为: 23.00000微软特有的sntscanf功能运行异常,c,windows,visual-studio-2015,C,Windows,Visual Studio 2015,我不太确定特定于Microsoft的功能应该如何工作 在我的Visual Studio 2015(14.0.25431.01更新3)上,使用v140工具包编译的以下程序的输出为: 23.00000 转换字段1 这在IMO中是错误的,而对于v120工具包,输出是: 0.00000 转换字段1 在我看来,这是正确的 #include <tchar.h> #include <stdio.h> #include <stdlib.h> int _tmain(int a
转换字段1 这在IMO中是错误的,而对于v120工具包,输出是: 0.00000
转换字段1 在我看来,这是正确的
#include <tchar.h>
#include <stdio.h>
#include <stdlib.h>
int _tmain(int argc, _TCHAR* argv[])
{
TCHAR szBuffer[10];
szBuffer[0] = _T('0');
szBuffer[1] = _T('\0');
szBuffer[2] = _T('2'); // replace '2' by '\0' and it works as expected
szBuffer[3] = _T('3');
szBuffer[4] = _T('\0');
szBuffer[5] = _T('\0');
double d;
int conv = _sntscanf_s(szBuffer, _countof(szBuffer), _T("%lf"), &d);
printf("%f\n", d);
printf("Converted fields %d\n", conv);
return 0;
}
替换为:
int conv = _sntscanf_s(szBuffer, _tcslen(szBuffer), _T("%lf"), &d);
无论使用何种工具包,输出总是0.00000
对我来说,这看起来像一只虫子。据我所知,扫描应该在遇到第一个NUL字符时停止
还有其他人遇到过这个问题吗?这可能无关紧要,但是给
TCHAR
赋值的正确方法是使用\t('c')
或\u TEXT('c')
。另外,您使用的是哪种风格的TCHAR
,UNICODE还是ANSI?@IanAbbott关于正确分配字符文字的方法,您是对的。是的,事实上这并不重要。我使用的是UNICODE风格,但问题与ANSI风格相同。看起来像-->“问题是它看到0并查找未找到的“X”,然后尝试推回未得到推回的“\0”(…),然后得到下一个字符,即“\0”之外的字符(错误)@看起来很接近这个问题的笨蛋。也许迈克尔在考验我们@IanAbbott这么说是一个dupe,但dupe不在现场?这可能无关紧要,但为TCHAR
分配字符文字值的正确方法是使用\t('c')
或\u TEXT('c')
。另外,您使用的是哪种风格的TCHAR
,UNICODE还是ANSI?@IanAbbott关于正确分配字符文字的方法,您是对的。是的,事实上这并不重要。我使用的是UNICODE风格,但问题与ANSI风格相同。看起来像-->“问题是它看到0并查找未找到的“X”,然后尝试推回未得到推回的“\0”(…),然后得到下一个字符,即“\0”之外的字符(错误)@看起来很接近这个问题的笨蛋。也许迈克尔在考验我们@IanAbbott这么说是个傻瓜,但这个傻瓜不在现场?
int conv = _sntscanf_s(szBuffer, _tcslen(szBuffer), _T("%lf"), &d);