在这个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机器上,输出非常完美。
答案 0 :(得分:0)
最后回答了我自己的问题:RTFM。它不应该是
fscanf_s(pfile,"%s",&s);
应该是
fscanf_s(pfile,"%s",s, _countof(s));
我不知道为什么它在XP中工作(方便#bytes / char?)但是,无论如何。