Разница в разборе текстового файла MSVC ++ 2008 между win7 <-> xp - PullRequest
0 голосов
/ 20 декабря 2011

Рабочая среда

  • Windows 7 Ultimate X64 SP1
  • Microsoft Visual Studio 2008 SP1 (C ++)

Текстовый файл

Моя программа разбирает чистый текстовый файл и работает. следующий код - это тот текстовый файл.

/*main.txt*/

_function main()
{
    a = 3;      //a is 3
    b = "three";
    c = 4.3;    //automatic typecast
    _outd(b+"3\n");
    _outd(b+a+c);
    d = a/c;
    _outd("\n"+d+"\n"); ///test commantation
    /*//
    comment
    */
}

это какой-то простой сценарий c-styple, который можно редактировать в текстовом редакторе, таком как блокнот (содержание в этом тексте не важно)

код

Текст открытый код.

std::wstring wsFileName; //from 

char* sz_FileName = new char[wsFileName.size()+1];
ZeroMemory(sz_FileName,sizeof(char)*(wsFileName.size()+1));

//////////////////////////////////////////////////////////////////////////
//for using 'fopen', change wsFileName to ascii
WideCharToMultiByte(CP_UTF8,0,wsFileName.c_str(),-1,sz_FileName,wsFileName.size(),NULL,NULL);

//open ascii text file
FILE* fp=fopen(sz_FileName,"rt");

std::string ch;
while(!feof(fp))
{
     ch.push_back(fgetc(fp));   //get textfile in ascii
}

Задача

Просмотр std::string ch в отладчике, который:

enter image description here

Это точно такой же, как я ожидал, результат в Windows 7. И выпущенный исполняемый файл тоже работает нормально. Но в Windows XP SP3 это вызывает ошибку во время выполнения.

Я копался всю ночь и наконец нашел его. Я установил Visual Studio 2008 SP1 на Windows XP SP3 и отладил его.

смотрит std::string ch:

enter image description here

Я догадался, что "знак новой строки" является причиной сбоя этой программы в Windows XP. и я угадал эту проблему на основе «кодировки текста между Windows 7 и Windows XP». поэтому я делаю новый текст скрипта, используя блокнот Windows XP. и попробуй разобрать. Но Windows XP имеет ту же проблему. я знаю, что: проблема возникает не только текстовый файл orignated windows 7, но и новый сгенерированный текст в windows xp. я не знаю, почему проблема возникает.

Вопрос

чистый текстовый файл (сгенерированный с помощью блокнота, editplus, ultraedit и других ...), который генерировал любые окна os (xp & vista & 7), как моя программа может прочитать этот текст с тем же результатом? Я хочу, чтобы каждый пользователь мог редактировать скрипт для управления и настройки моей программы в своей собственной ОС, используя свой собственный простой текстовый редактор.

1 Ответ

0 голосов
/ 13 июня 2012

Почему бы не проверить символ перед добавлением в строку, если он содержит нежелательный символ?Например, что-то вроде:

char temp;
while(...)
{
  temp = fgetc(fp);
  if (temp != "\r")
    ch.push_back(temp);
}

Я не тестировал код, но он должен работать, если "неправильный" символ действительно "\ r".

...