Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.
Внимание! Некоторое время письма не доходят до аккаунтов MAIL RU GROUP, не доходят на все почтовые ящики mail.ru, inbox.ru, bk.ru. Пишите им жалобы, чтобы быстрее восстановили получение писем, регистрируйтесь через яндекс почту и gmail, туда письма с активизацией доходят.

Вернуться   Форум программистов > C++ > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 04.11.2010, 00:54   #1
AlkaloiD
Пользователь
 
Регистрация: 21.09.2010
Сообщений: 24
Репутация: 13
По умолчанию заполнение stringa из файла

Доброго времени суток всем!
На днях написал лабу, сегодня занялся минимизацией исходного кода. Наткнулся на lenght и size которые выполняли очевидную роль, указывали длину строки, только вот size изменяется в ходе работы, а потом lenght изменяется вслед за ней. Переменная явно лишняя, убрал. И получил:
создается динамический массив строк длиной в size (предположим что size = 100)
Цитата:
...
char **array_coding = new char *[size];
for (int i = 0; i < size; i++)
{
array_coding[i] = new char [size];
}
...
из файла берется строка длиной size
Цитата:
...
fgets(array_coding[0], size, file_input);
...
обращение к первому и последнему элементу
Цитата:
...
fprintf(file_coding, "%c%c", array_coding[0][0], array_coding[0][size - 2]);
...
по обращению все верно, массив зарезервировал в памяти место под size = 100 чаров, записали туда строку и добавили к ней "\0". То есть максимум влезет в size строка в 99 символов + "\0". Но так как строка идет не от [1..100] а от [0..99], обращение к последнему будет size - 2.
Вопрос как это работает? Если я записываю в массив из 100 чаров 100 чаров куда девается "\0"?
AlkaloiD вне форума   Ответить с цитированием
Старый 04.11.2010, 02:39   #2
kaljan775
:D
Участник клуба
 
Аватар для kaljan775
 
Регистрация: 26.09.2010
Адрес: Казань
Сообщений: 570
Репутация: 31

skype: kaljan775
По умолчанию

у меня \0 вылезает за пределы участка памяти массива

что-то наверняка нормально работать перестанет, не трогайте 99й символ '\0'
__________________
Пишу ПО, создаю сайты, делаю курсовые работы, за деньги
C#, .NET, MS SQL, AngularJS, HTML, jQuery

Последний раз редактировалось kaljan775; 04.11.2010 в 02:42.
kaljan775 вне форума   Ответить с цитированием
Старый 04.11.2010, 18:07   #3
AlkaloiD
Пользователь
 
Регистрация: 21.09.2010
Сообщений: 24
Репутация: 13
По умолчанию

Цитата:
Сообщение от kaljan775 Посмотреть сообщение
у меня \0 вылезает за пределы участка памяти массива

что-то наверняка нормально работать перестанет, не трогайте 99й символ '\0'
кэп.. вопрос не в этом заключался..
AlkaloiD вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Заполнение массива из файла на Си bagbier Помощь студентам 1 21.09.2010 14:09
Заполнение бинарного файла. polarity Помощь студентам 2 10.06.2010 08:43
Заполнение массива структур данными из файла Brutallus Общие вопросы C/C++ 0 26.11.2009 20:01
заполнение CDS файла TaTT DoGG БД в Delphi 0 25.04.2008 11:05
Заполнение динамического списка из файла KORT Помощь студентам 2 01.05.2007 22:28


21:44.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru