Проблемы с файлами ввода / вывода с использованием строк в c ++ [duplicate]

В других словах

  • document.querySelector() выбирает только первый элемент указанного селектора. Поэтому он не выплевывает массив, это одно значение. Подобно document.getElementById(), который извлекает только ID-элементы, поскольку идентификаторы должны быть уникальными.
  • document.querySelectorAll() выбирает все элементы с указанным селектором и возвращает их в массиве. Похоже на document.getElementsByClassName() только для классов и document.getElementsByTagName().

Зачем использовать querySelector?

Используется просто для единственной цели легкость и краткость.

Зачем использовать getElement / sBy? *

Более быстрая производительность.

Почему это различие в производительности?

Оба способа выбора имеют целью создание NodeList для дальнейшего использования. querySelectors генерирует статический NodeList с селекторами, поэтому он должен быть сначала создан с нуля. getElement / sBy * немедленно адаптирует существующий живой NodeList текущего DOM.

Итак, когда использовать какой метод зависит от вас / вашего проекта / вашего устройства.

Infos

Демонстрация всех методов Документация NodeList Тест производительности

5
задан Keng92pd 3 June 2012 в 21:05
поделиться

7 ответов

строка

outfile.write((char*) &text, sizeof (string));

неверна

sizeof(string) не возвращает длину строки, она возвращает размер строкового типа в байтах.

также не отбрасывает текст в char* с помощью C cast, вы можете получить символ char *, используя соответствующую функцию-член text.c_str()

, вы можете просто написать

outfile << text;

.

8
ответ дан Anders K. 21 August 2018 в 12:23
поделиться

1) почему вы используете указатели на класс string? 2) вы не должны использовать sizeof со строкой, он возвращает размер объекта, а не размер строки.

вы должны попробовать:

string text = "Text";
outfile.write(text.c_str(), text.size());

или

outfile<<text;
2
ответ дан Baget 21 August 2018 в 12:23
поделиться

Возможно, также использовать c_str(), чтобы получить указатель на char, а не просто безумный.

0
ответ дан Botz3000 21 August 2018 в 12:23
поделиться
  • 1
    Предполагая, что является std::string. string используется довольно странно. – chris 3 June 2012 в 20:49

Попробуйте этот фрагмент кода.

/* writing string into a binary file */

  fstream ifs;
  ifs.open ("c:/filename.exe", fstream::binary | fstream::in | fstream::out);

  if (ifs.is_open())
  {
   ifs.write("string to binary", strlen("string to binary")); 
   ifs.close();
  }

Здесь - хороший пример.

0
ответ дан Mutantoe 21 August 2018 в 12:23
поделиться
  • 1
    Вам не хватает закрывающей скобки в конце строки ifs.write ... – ap_ 25 August 2014 в 21:49

Чтобы записать std :: string в двоичный файл, сначала необходимо сохранить длину строки:

std::string str("whatever");
size_t size=str.size();
outfile.write(&size,sizeof(size);
outfile.write(&str[0],size);

Чтобы прочитать это, отмените процесс, изменив размер строки сначала, чтобы вы имеют достаточно места:

std::string str;
size_t size;
infile.read(&size, sizeof(size));
str.resize(size);
infile.read(&str[0], size);

Поскольку строки имеют переменный размер, если вы не поместили этот размер в файл, вы не сможете получить его правильно. Вы можете положиться на маркер '\ 0', который, как гарантируется, будет в конце строки c или эквивалентной строки :: c_str (), но это не очень хорошая идея, потому что 1. вы должны прочитать в string character по символу, проверяющему значение null 2. Строка std :: string может содержать нулевой байт (хотя это действительно не так, потому что вызовы c_str () тогда путают).

2
ответ дан Pablo Alvarez 21 August 2018 в 12:23
поделиться
  • 1
    Это сработало для меня с одним изменением. В написанном коде я изменил outfile.write (& amp; str [0], размер); outfile.write (str.c_str (), размер); – Scott Hutchinson 14 March 2018 в 17:55

Ваш код неправильный, как вы используете для написания & amp; прочитайте ошибку расширения файла и файла, которую вы пытаетесь прочитать в текстовом файле .txt, правильный код

Запись в файл

std::string text = "Text";
ofstream outfile("myfile.dat", ofstream::binary | ios::out);
outfile.write(&text,sizeof (string));//can take type
outfile.write(&text,sizeof (text));//can take variable name
outfile.close();

файл чтения

char* buffer = (char*) malloc(sizeof(string));
ifstream infile("myfile.dat", ifstream::binary | ios::in);    
infile.read(buffer, sizeof (prueba));
std::string* elem = (string*) buffer;
cout << *elem;
infile.close();

Попробуйте Это будет работать

0
ответ дан Shahzaib Chadhar 21 August 2018 в 12:23
поделиться
  • 1
    Мы ценим ваш ответ, но это 5-летний вопрос. – Sandeesh 21 May 2017 в 13:51
0
ответ дан Machiel Kolstein 1 November 2018 в 06:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: