stringstream :: seekp не работает в Visual Studio 2015
Я хочу прочитать кусок данных из файла в stringstream, который позже будет использоваться для анализа данных (используя getline, >> и т.д.). После чтения байтов я установил буфер потока строк, но не могу сделать это, чтобы установить указатель p. Я протестировал код на некоторых онлайн-сервисах, таких как onlinegdb.com и cppreference.com, и он работает. Однако в Microsoft я получаю ошибку - указатели выходят из строя.
Вот код, я заменил файл-чтение на массив символов.
#include <sstream>
#include <iostream>
int main()
{
char* a = new char [30];
for (int i=0;i<30;i++)
a[i]='-';
std::stringstream os;
std::cout << "g " << os.tellg() << " p " << os.tellp() << std::endl;
os.rdbuf()->pubsetbuf(a,30);
os.seekp(7);
std::cout << "g " << os.tellg() << " p " << os.tellp() << std::endl;
}
вывод я получаю когда он работает
g 0 p 0
g 0 p 7
вывод я получаю на visual studio 2015
g 0 p 0
g -1 p -1
какие-нибудь иды?
Спасибо
std::sstream::setbuf
может ничего не делать:
Если s - нулевой указатель, а n - ноль, эта функция не имеет никакого эффекта.
В противном случае эффект определяется реализацией: некоторые реализации ничего не делают, в то время как некоторые реализации очищают член std :: string, используемый в настоящее время в качестве буфера, и начинают использовать предоставленный пользователем массив символов размера n, на первый элемент которого указывает s, как буфер и последовательность ввода/вывода символов.
Вам лучше использовать конструктор std::stringstream
для установки данных или вызвать str()
:
#include <sstream>
#include <iostream>
int main()
{
std::string str( 30, '-' );
std::stringstream os;
std::cout << "g " << os.tellg() << " p " << os.tellp() << std::endl;
os.str( str );
os.seekp(7);
std::cout << "g " << os.tellg() << " p " << os.tellp() << std::endl;
}
- Вопросы
- Stringstream
- stringstream :: seekp не работает в Visual Studio 2015