Я читаю файл на C++, используя потоки, в частности, fstream, а не ifstream.Хранение строк с переменным размером в структурах
blah blah blah\n
blah blah\n
blah blah blah blah \n
end
Это повторяется снова и снова с
- varble количество бла-х годов в каждой строке,
- постоянное число линий между каждым концом, конец является разделителем здесь
I хотите прочитать один набор данных, а затем сохранить его в массиве символов, в структуре стиля C. Я начал с попытки использовать getline(), но разделитель может быть только одним символом, а не тремя. Я, очевидно, не могу попытаться прочитать заданное количество байтов, используя только read(), поскольку число будет различным для каждого набора.
Итак, я разорван, что самое легкое (и самое надежное), что нужно сделать здесь. Должен ли я называть getline, пока не нахожу строку «конец», добавляя каждую строку снова и снова?
Я пробовал массив двумерных символов, но копирование на него было чем-то вроде боли. Могу ли я использовать strncpy здесь? Я не думаю, что это работало
char buf[10][10];
strncpy(buf[1], "blah blah",10);
У меня есть несколько идей здесь, но я просто не уверен, один (или одна я не хотя) является лучшим.
EDIT: Так что это для сетевого приложения, поэтому размер массива char (или строки) всегда должен быть одинаковым. Кроме того, в структуре не должно быть указателей.
Связанный вопрос: так ли хранится массив символов и std :: string в памяти? Я всегда, хотя были некоторые накладные расходы с std :: string.
Вы можете получить строку C-типа, указатель обугленного, только для чтения из станда :: строки, используя метод c \ _str. Метод данных также работает, но не гарантирует нулевого завершения. То, как строка точно хранится в памяти, является деталью реализации (некоторые относятся к подсчету ссылок, например), но, безусловно, наиболее распространенный сводится к массиву символов. Однако все же проще использовать std :: string и позволить ему управлять массивом. – 2009-12-01 21:15:10