Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > 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


16:09.


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

RusProfile.ru


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