Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Перегруженная функция в классе вектор http://www.cyberforum.ru/cpp-beginners/thread30662.html
#include <iostream> #include <vector> #include"Employe.hh" using namespace std; int main() { vector<Racine> v; //вектор объектов класса Racine
C++ Найти общую сумму 10 введенных массивов Помогите найти общую сумму 10 введеных массивов. http://www.cyberforum.ru/cpp-beginners/thread30634.html
Шаблон очереди C++
Это шаблон очереди на списках. Посмотрите, пожалуйста, в чём ошибка: #include <iostream> using namespace std; template <typename TInfo> class TQueue { protected:
C++ Проверьте лабораторную №3
Создать шаблоны функций, выполняющей ввод, вывод и упорядочивание матриц. Протестировать шаблоны для матриц с элементами различных типов: int, float и char. Варианты заданий приведены в лабораторной...
C++ error LNK2019: ссылка на неразрешенный внешний символ http://www.cyberforum.ru/cpp-beginners/thread30624.html
Вот код, неполный, решил откомпилировать - узнать, что исправить #include "stdafx.h" #include <cstdlib> #include <iostream> using namespace std; #define istr 21 struct train{ int num; char...
C++ Приведение типов Чем отличается type(x) от (type) x? подробнее

Показать сообщение отдельно
Evg
Эксперт CАвтор FAQ
18238 / 6363 / 435
Регистрация: 30.03.2009
Сообщений: 17,578
Записей в блоге: 28
19.04.2009, 15:57
С начала же программы увидел косяк: gets - опасная функция. У неё нет никакой возможности задать хоть как-то размер буффера. Т.е. ты в неё подаёшь указатель на буффер длиной в 15 символов, но ввести можешь 100 символов, после чего у тебя память засрётся непредсказуемым образом. Поэтому как минимум буффер a надо увеличить до размера максимально допустимой длины строки при вводе с клавиатуры (влепи 1000, хуже не станет)

Ну и очевидный косяки наверное видишь сам - у тебя дублирование кода в цикле и за пределами цикла (для последней итерации). Данный вопрос я так понимаю, рассматривать пока не стОит.

Насколько я понимаю, ты сначала данные вводишь с клавиатуры, а потом загоняешь их в файл, при этом попутно делаешь разбивку длинных строк. Потом из этого файла перегоняешь в результирующий файл с заполнением остатка знаками "!"

В логику того, как ты написал, вникнуть сложно, но, подозреваю, что проблема у тебя в strcpy. Эта функция копирует до тех пор, пока не встретился нулевой байт. Т.е давай посмотрим строки 23 и 24. У тебя выделен буффер rab размером в 20 байт. Далее ты в него копируешь a+i*n. Теперь представь себе, что в a у тебя записано 200 байт, а n=10. В этом случае будет копирование начиная с 10 байта и до конца строки. Но тебе нужно скопировать только n байт. В этом случае обрати внимание на функцию strncpy. И учти, что нолик на конце придётся лепить ручками, т.к. при ограниченном копировании нолик не лепится

Добавлено через 1 минуту 48 секунд
Цитата Сообщение от accept Посмотреть сообщение
лучше сначала получить строку из файла, а потом её обрабатывать (делить или дополнять), учитывать, что поделённая строка снова должна участовать в процессе, на следующем чтении
А я бы из файла в файл перегонял побайтово. Читаю байт, если это не энтер, записываю его в результирующий файл. Если уже записано n символов, то записываю перевод строки. Если прочитал энтер, то по количеству текущих символов можно подсчитать, чколько знаков "!" нужно записать в файл и т.п.
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru