Arrays C++;vector.assign(字符数组的内容)在WinXP-32中工作,在Win10-64中失败;为什么?

Arrays C++;vector.assign(字符数组的内容)在WinXP-32中工作,在Win10-64中失败;为什么?,arrays,vector,c++98,Arrays,Vector,C++98,在这个答案的第一个答案和最后一个注释中,我学会了将我的字符数组(我刚刚从文件中读取)的内容分配到我的向量中。以下代码在Windows XP 32位Visual Studio 2010中运行良好,但在Win10 64位Studio 2012中失败。两个项目都使用Unicode字符集。文件myConfig.txt的内容是(由选项卡分隔): 单词3莫比乌斯-拉格朗日-高斯 我是一个彻头彻尾的傻瓜,所以如果有些错误看起来太愚蠢,任何人都不会犯,那就假设是我犯的吧 守则: #include "stdafx

在这个答案的第一个答案和最后一个注释中,我学会了将我的字符数组(我刚刚从文件中读取)的内容分配到我的向量中。以下代码在Windows XP 32位Visual Studio 2010中运行良好,但在Win10 64位Studio 2012中失败。两个项目都使用Unicode字符集。文件myConfig.txt的内容是(由选项卡分隔):

单词3莫比乌斯-拉格朗日-高斯

我是一个彻头彻尾的傻瓜,所以如果有些错误看起来太愚蠢,任何人都不会犯,那就假设是我犯的吧

守则:

#include "stdafx.h"
#include <windows.h>
#include <vector>
#include <iterator>     
#include <string.h>
#include <wchar.h>
#include <tchar.h>

using namespace std;

vector<wchar_t> wvec;
int n;
wchar_t ss[256];
FILE* pfile;

int _tmain(int argc, _TCHAR* argv[])
{
    fopen_s(&pfile,"myConfig.txt","r");
    fwscanf_s(pfile,L"%ls",&ss);
    wprintf(L"var name is %ls\n",ss);
    fwscanf_s(pfile,L"%d",&n); 
    printf("num words is %d\n",n);
    for (int i=0; i<3; i++) {
        fwscanf_s(pfile,L"%ls",&ss);
        wvec.clear();
        n=wcslen(ss);
        wprintf(L"vec empty %ls length %d\n",vec,vec.size());
        wvec.assign(ss,ss+n+1); // +1 to contain null char
        wprintf(L"vec sz %d filled %ls\n",wvec.size(),wvec);
    }
    printf("press Enter to finish\n");
    getchar();
    return 0;
}
#包括“stdafx.h”
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
矢量wvec;
int n;
wchar_t ss[256];
文件*pfile;
int _tmain(int argc,_TCHAR*argv[]
{
fopen_s(&pfile,“myConfig.txt”,“r”);
fwscanf_s(pfile、L“%ls”和ss);
wprintf(L“变量名称为%ls\n”,ss);
fwscanf_s(pfile,L“%d”和n);
printf(“num words是%d\n”,n);

for(int i=0;i最终回答了我自己的问题:。它不应该是

fscanf_s(pfile,"%s",&s);
应该是

fscanf_s(pfile,"%s",s, _countof(s));
我不知道为什么它在XP中工作(方便的字节/字符?),但是,不管怎样