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

时间:2016-02-10 21:01:19

标签: arrays vector c++98

在这个StackExchange topic上,第一个回答和最后一个评论,我学会了将我的char数组的内容(我刚从文件中读取)分配到我的向量中。以下代码在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;
}

在Win10机器上,当我从开发环境运行/调试时,输出部分显示&#34; vec sz 7填充???&#34;当我在x64 \ Release文件夹中运行exe时,相应的输出行表示&#34; vec sz 5填充???&#34;,而myConfig.txt的内容完全相同。

在XP机器上,输出非常完美。

1 个答案:

答案 0 :(得分:0)

最后回答了我自己的问题:RTFM。它不应该是

fscanf_s(pfile,"%s",&s);

应该是

fscanf_s(pfile,"%s",s, _countof(s));

我不知道为什么它在XP中工作(方便#bytes / char?)但是,无论如何。