Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.11.2010, 23:54   #1
AlkaloiD
Пользователь
 
Регистрация: 21.09.2010
Сообщений: 24
По умолчанию заполнение 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, 01:39   #2
kaljan775
:D
Форумчанин
 
Аватар для kaljan775
 
Регистрация: 26.09.2010
Сообщений: 570
По умолчанию

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

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

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

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

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


Купить рекламу на форуме - 42 тыс руб за месяц



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