В других словах
document.querySelector()
выбирает только первый элемент указанного селектора. Поэтому он не выплевывает массив, это одно значение. Подобно document.getElementById()
, который извлекает только ID-элементы, поскольку идентификаторы должны быть уникальными. document.querySelectorAll()
выбирает все элементы с указанным селектором и возвращает их в массиве. Похоже на document.getElementsByClassName()
только для классов и document.getElementsByTagName()
.
Зачем использовать querySelector?
Используется просто для единственной цели легкость и краткость.
Зачем использовать getElement / sBy? *
Более быстрая производительность.
Почему это различие в производительности?
Оба способа выбора имеют целью создание NodeList для дальнейшего использования. querySelectors генерирует статический NodeList с селекторами, поэтому он должен быть сначала создан с нуля. getElement / sBy * немедленно адаптирует существующий живой NodeList текущего DOM.
Итак, когда использовать какой метод зависит от вас / вашего проекта / вашего устройства.
Infos
Демонстрация всех методов Документация NodeList Тест производительности
строка
outfile.write((char*) &text, sizeof (string));
неверна
sizeof(string)
не возвращает длину строки, она возвращает размер строкового типа в байтах.
также не отбрасывает текст в char*
с помощью C cast, вы можете получить символ char *, используя соответствующую функцию-член text.c_str()
, вы можете просто написать
outfile << text;
.
1) почему вы используете указатели на класс string? 2) вы не должны использовать sizeof со строкой, он возвращает размер объекта, а не размер строки.
вы должны попробовать:
string text = "Text";
outfile.write(text.c_str(), text.size());
или
outfile<<text;
Возможно, также использовать c_str()
, чтобы получить указатель на char, а не просто безумный.
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();
}
Здесь - хороший пример.
Чтобы записать 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 () тогда путают).
Ваш код неправильный, как вы используете для написания & 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();
Попробуйте Это будет работать