C++ vector.assign (содержимое массива char) работает в WinXP-32, не работает в Win10-64; Зачем?

В этой теме StackExchange: первый ответ и последний комментарий к этому ответу - я научился назначать содержимое моего массива 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 вывод отчасти говорит "vec sz 7 заполнен???", когда я запускаю / отлаживаю из среды разработки. Когда я запускаю exe-файл в папке x64\Release, соответствующая строка выводит сообщение "vec sz 5 заливка???", а содержимое myConfig.txt точно такое же.

На машине XP выход идеален.

1 ответ

Наконец-то ответил на мой собственный вопрос: RTFM. Так не должно быть

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

Так должно быть

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

Я не знаю, почему это работает в XP (удобно # байт / символ?), Но, что угодно.

Другие вопросы по тегам