C++ fscanf_在Winserver2008 VS2013 64位中无法正常工作

C++ fscanf_在Winserver2008 VS2013 64位中无法正常工作,c++,visual-c++,visual-studio-2013,64-bit,windows-server-2008-r2,C++,Visual C++,Visual Studio 2013,64 Bit,Windows Server 2008 R2,当我们在Visual studio 2013(C++控制台应用程序)Os-Winsever2008(64位)中使用fscanf_s方法时,文件指针会提前读取一到两个字节的数据。 例如:在读取文本文件时,文件的第二行是“Administrator”,但fscanf_s()返回的单词是“Administrator”。 请帮我纠正这个问题。 该代码在使用VisualStudio2008的WindowsXP32位上运行良好 FILE* pFile; pFile = NULL; string strFil

当我们在Visual studio 2013(C++控制台应用程序)Os-Winsever2008(64位)中使用fscanf_s方法时,文件指针会提前读取一到两个字节的数据。 例如:在读取文本文件时,文件的第二行是“Administrator”,但fscanf_s()返回的单词是“Administrator”。 请帮我纠正这个问题。 该代码在使用VisualStudio2008的WindowsXP32位上运行良好

FILE* pFile;
pFile = NULL;
string strFile = "E:\\10_Products.lrf";
fopen_s(&pFile, strFile.c_str(), "r");
char szTemp[256];
string strTemp = "";
if (NULL != pFile)
{   
    while (!feof(pFile))
    {
        nRet = fscanf_s(pFile, "%s", szTemp);
        if (EOF == nRet)
        {
            cout << "EOF detected";
        }
    }
    return 0;
}
从fscanf_s()上的文档中:

以及:

所以你应该这样称呼它:


fscanf_s(fp,“%80s”,cmd,sizeof(cmd))

样本代码文件*pFile;pFile=NULL;string strFile=“E:\\10\u Products.lrf”;fopen_s(&pFile,strFile.c_str(),“r”);char-szTemp[256];字符串strTemp=“”;if(NULL!=pFile){while(!feof(pFile)){nRet=fscanf_s(pFile,“%s”,szTemp);if(EOF==nRet){您是否应该编辑您的帖子,而不是将其添加为评论。如果使用fscanf此代码工作正常。对于fscanf_,它显示了此问题,请帮助查找问题。如果此答案对您有帮助,请将其标记为答案?
[OPERATOR_LEVEL]
Administrator
The main difference between the secure functions (with the _s suffix) and the older functions is that the secure functions require the size of each c, C, s, S and [ type field to be passed as an argument immediately following the variable. For more information, see scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l and scanf Width Specification.
Unlike scanf and wscanf, scanf_s and wscanf_s require the buffer size to be specified for all input parameters of type c, C, s, S, or [. The buffer size is passed as an additional parameter immediately following the pointer to the buffer or variable. For example, if reading a string, the buffer size for that string is passed as follows:

char s[10];

scanf("%9s", s, 10);