Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
C++ Перегруженная функция в классе вектор #include <iostream> #include <vector> #include"Employe.hh" using namespace std; int main() { vector<Racine> v; //вектор объектов класса Racine https://www.cyberforum.ru/ cpp-beginners/ thread30662.html C++ Найти общую сумму 10 введенных массивов
Помогите найти общую сумму 10 введеных массивов.
C++ Шаблон очереди https://www.cyberforum.ru/ cpp-beginners/ thread30627.html
Это шаблон очереди на списках. Посмотрите, пожалуйста, в чём ошибка: #include <iostream> using namespace std; template <typename TInfo> class TQueue { protected:
C++ Проверьте лабораторную №3 Создать шаблоны функций, выполняющей ввод, вывод и упорядочивание матриц. Протестировать шаблоны для матриц с элементами различных типов: int, float и char. Варианты заданий приведены в лабораторной работе № 1. Какие недочеты, что можно улучшить и т.д. #include <iostream> #include <conio.h> using namespace std; #define DATATYPE double // Òèï äàííûõ ìàòðèöû https://www.cyberforum.ru/ cpp-beginners/ thread30626.html
C++ error LNK2019: ссылка на неразрешенный внешний символ
Вот код, неполный, решил откомпилировать - узнать, что исправить #include "stdafx.h" #include <cstdlib> #include <iostream> using namespace std; #define istr 21 struct train{ int num; char naz; char time;
C++ Приведение типов Чем отличается type(x) от (type) x? https://www.cyberforum.ru/ cpp-beginners/ thread30618.html
C++ Посмотрите лабораторную работу №2 Используя алгоритмы работы с матрицей, разработанные в лабораторной работе №*1, разработать и протестировать программу обработки двух матриц с элементами разных типов. Программа должна содержать перегруженные функции для работы с целочисленной матрицей и матрицей, элементы которой - строки. #include <iostream> #include <conio.h> using namespace std; //... https://www.cyberforum.ru/ cpp-beginners/ thread30616.html Строки в условии C++
Помоги разобраться со строками в условии. cout<<"Is it a worker or a student?"<<endl; cin>>s; if(s=="worker") worker1.data_worker(); else student1.data_student(); Здесь чисто игнорирует, не выдавая никаких ошибок.
C++ Библиотека gmp.h, бесконечные числа https://www.cyberforum.ru/ cpp-beginners/ thread30607.html
вопрос такой: как выводить числа, которые длинной больше 10 символов?как работает gmp_get_str?
C++ Как правильно создать динамический массив из функции Вот так ругается компилятор: int** i_matrix; f(i_matrix,N, M); ............................................. void f(int** matrix, int n, int m) { matrix = new int *; if (!matrix) exit(0); https://www.cyberforum.ru/ cpp-beginners/ thread30606.html
C++ Cоздание дерева выражения
Есть таблица лексемм:p: ... struct Lexem { char type; char name; int pos; int prior; };
C++ Можно примерчик простенькой програмки, которая читает строку с клавы и записывает ее в переменную. https://www.cyberforum.ru/ cpp-beginners/ thread30589.html
Собственно простенький примерчик. Надо, что бы человек вводил с клавиатуры строку, потом нажимал <Enter> и, то что он ввел попадало в переменную, или сразу в ячейку матрицы. Вот предыдущий код: #include <iostream.h> #include <string.h> int main() {
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
21.04.2009, 20:26 0

Потеря символа при копировании строки - C++ - Ответ 143337

21.04.2009, 20:26. Показов 4207. Ответов 18
Метки (Все метки)

Ответ

Ты меня не совсем понял. Я видимо не очень ясно выражаюсь. В общем никак не могу решить с чего начать, а потмоу возможно будет некий сумбур

Сначала касательно твоего примера. Массив char'ов (или указатель на char) ты трактуешь как string в понятии интерфейсов из string.h библиотеки libc: т.е. набор байтов, заканчивающихся нулём. Это всё прекрасно до тех пор, пока такая строка влезает в размер буффера (как изначально пытался сделать автор данной темы)

Проблема нашего с тобой спора изначально состоит в том, что хотелось бы работать с файлом таким образом, что читать оттуда строками (в вышеупомянутом понятии string). Но нормально сделать имея на руках лишь стандартные интерфейсы не получится. Немного отклонясь в сторону, скажу, что я несколько погорячился, сказав что все системные функции чтения строки из файл опасны - это не так, ибо в интерфейсе fgets действительно есть параметр, задающий размер буффера (таким образом данные мы не испортим). А вот gets является "опасной". Возвращаюсь к теме. Мы хотим читать построков из файла. Но интерфейсом fgets нормально ты этого не сделаешь, поскольку подавать в него ты должен буффер и размер, но при этом ты не знаешь заранее, какого размера буффер тебе нужно выделять, чтобы. Т.е. у тебя нет никакой гарантии, что fgets тебе прочтёт целую строку из файла, а потому по-хорошему ты должен писать свою процедуру, которая в цикле будет вызывать fgets и проверяя каждый раз, есть ли энтер в строке. Если нет, то тебе буффер надо удлинять и продолжать чтение до тех пор, пока ты не доехал до энтера. Только такой подход даёт тебе 100% гарантию, что ты будешь нормально построково читать файл. Ну и, как вариант, ты накладываешь техническое ограничение на максимальный размер строки в файле и работаешь в предположении соблюдения этого ограничения. Это тоже вариант, но годится он только для программ, написанных для себя. Для промышленных программных продуктов такое, понятное дело, не годится

> так я тебе привёл пример с номером строки, случай обычный
В случае, тобою описанном, я бы не заморачивался. Открываю файлы на чтение и на запись. В файл на запись пишу номер строки. Далее побайтово переписываю из файла чтения в файл записи до тех пор, пока не встречаю энтер. По энтеру в файл записи дополнительно пишу номер строки о опять всё повторяю. Ну и нужно ещё отсечь факт конца файла, чтобы не налепить лишний номер строки (которая окажется пустой)

> стандартные функции обеспечивают переносимость, зачем делать функцию, которая уже есть в стандарте ?
Выше в данном посте я тебе отписал пример работы с целиковой строкой. Стандартных функций на Си для этого нет. Для Си++ наверняка есть, но делают они то же, что я и описал - динамически довыделяют буффер до тех пор, пока недостигнем конца строки (энетра)

> fgets содержит буфер, он ограничивает количество введённых символов вплоть до нуль-символа, то есть задав 1000 у тебя максимум будет 999+нуль-символ, а минимум - \n
Замечание принимается. Выше я написал, что погорячился с этим утверждением. Однако для функции fscanf, которая использовалась в первоначальном посте, моё утверждение остаётся в силе

> и она с тем же успехом может читать в память, которая может быть больше миллиона
Выше я написал, что заранее ты не знаешь, какого размера у тебя строки, а потому заранее неизвестно, какой буффер выделять. Выделять каждый раз миллион байт, согласись, не кошерно

> на низком уровне вообще инструкции и что
Под фразой "на низком уровне" я подразумевал внутри библиотечных интерфейсов. С той точки зрения, что ты работаешь на высоком уровне с интерфейсами типа fgets, но их внутренняя реализация - это "низкий" уровень, который в общем случае на разных архитектурах реализуется по разному, а верхний уровень, как ты уже справедливо заметил, даёт нам возможность писать переносимые коды

Последний твой комментарий из поста #8 не совсем понял. И сдаётся мне, это всё по той же причине. Наверное мы говорим немного не об одном и том же

Вернуться к обсуждению:
Потеря символа при копировании строки C++
0
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.04.2009, 20:26
Готовые ответы и решения:

Ошибка при копировании строки в конец файла
Здравствуйте! Написал программу которая ищет заданный символ в текстовом файле и копирует первую...

Лишние символы в конце строки при копировании
При копировании данных в строку (std::string) в цикле, на &quot;стыках&quot; появляются лишние символы....

Ошибка при чтении символа строки
Здравствуйте! Не могу понять почем эта ошибка мне выбивается при исполнении следующего кода:...

Ошибка при взятии символа под номером Х из строки
День добрый, дорогие программисты. У меня возникла проблема с использованием textBox1-&gt;Text=...

18
21.04.2009, 20:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.04.2009, 20:26
Помогаю со студенческими работами здесь

Как задать конец строки и прекратить при вводе определённого символа?
Добрый день! Подскажите, пожалуйста, как задать конец строки при вводе определённого символа....

Как скопировать подстроку из строки до определенного символа? Или удалить, начиная с этого символа
Добрый вечер. Ответ искал, но не нашёл. Предположим, есть строка: ABC|DEF Надо скопировать...

Потеря dataset при копировании
Добрый день! Видимо совсем идиотический вопрос, но: есть следующий код DataSet qqq = new...

Потеря форматирования текста при копировании фрагмента отдельных страниц из браузера в Word 2010
Word 2010 Firefox 54.0.1 (32-бит) Копирую фрагмент из браузера, содержащий форматированный текст,...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru