Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Имею желание объявить массив строк с переменной длиной
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
Страницы: 1, 2
GetSmart
Вобщем в целях экономии памяти программ и чтоб не извращаться я хочу объявить вот это:
Код
const char TablNames[] =
  { lChTablMax,
    "ЛЯЛЯЛЯЛЯЛЯ",
    "ДЫДЫДЫДДЫ",
    "ГУГУГУ"
  };

Разумеется, можно написать всё это через отдельные символы, но это не для меня. Я вот хачу так. Подскажите мне, что здесь надо поправить, чтоб компилятор меня не отсылал читать книжку?

Обязательное требование - чтоб строки были переменной длины и между ними было по одному нулю. А при чтении программно я это дело разгребу как мне надо.
Ну и на Си, конечно! Через указатели как-то криво всё получается. В смысле больше места занимает.
gab
Не знаю как в IAR С, но в С это, вроде, делается так:

typedef struct aaa{
int len;
char **txt;
}aaa;

const aaa bbb = {
10,
{
"aaa","bbb", "cccc", "ddd"
}
};

Т.е. надо отдельно выделить "разницу" типов в массиве. В вашем примере были смешаны типы char* и int, хотя весь массив объявлялся как char* (что тоже ошибка. должен быть, хотябы char** или char *[]. т.к. в С строки - это указатель и если делаем массив из строк переменной длинны, то этот массив должен быть "указателем на указатели строк" smile.gif).
Гость
Объявить массив строк можно так:
Код
const char * const aaa[] = {
"123",
"aaaaaa",
"bbbbbbbbbb"
};

Доступ к строкам через aaa[i].
Строки, если они все разные(привет оптимизатору!), лягут друг за другом разделенные пробелом.
Если нужно что то другое задайте вопрос точнее ( что там за lChTablMax ?)
Old1
Цитата(GetSmart @ Aug 2 2006, 01:04) *
Вобщем в целях экономии памяти программ и чтоб не извращаться я хочу объявить вот это:
Код
const char TablNames[] =
  { lChTablMax,
    "ЛЯЛЯЛЯЛЯЛЯ",
    "ДЫДЫДЫДДЫ",
    "ГУГУГУ"
  };

Разумеется, можно написать всё это через отдельные символы, но это не для меня. Я вот хачу так. Подскажите мне, что здесь надо поправить, чтоб компилятор меня не отсылал читать книжку?

Обязательное требование - чтоб строки были переменной длины и между ними было по одному нулю. А при чтении программно я это дело разгребу как мне надо.
Ну и на Си, конечно! Через указатели как-то криво всё получается. В смысле больше места занимает.


Чтобы все легло во flash сделайте так:
Код
__flash char *TablNames[]={
  "44444444444444",
  "555555555555555",
  "66666666666666666666",
  "7777777777777777777777"
};
Rst7
Цитата
"ЛЯЛЯЛЯЛЯЛЯ",    "ДЫДЫДЫДДЫ",    "ГУГУГУ"


А так:
__flash char aaa[]="ЛЯЛЯЛЯЛЯЛЯ\0ДЫДЫДЫДДЫ\0ГУГУГУ"
zltigo
Цитата
Имею желание объявить массив строк с переменной длиной

Массив по тому и "маcсив", что однородный. Посему массивом может быть только массив указателей на строки, что Вам здесь и показали, как сделать.


Цитата(Old1 @ Aug 2 2006, 09:38) *
Чтобы все легло во flash сделайте так:
Код
__flash char *TablNames[]={
  "44444444444444",
  "555555555555555",
  "66666666666666666666",
  "7777777777777777777777"
};

Кстати, для _моего_ развития в части незнакомых мне AVRовских заморочек - то что указатели лягут во
FLASH, это ясно. А вот на счет тела строк - уверены?
diper
Объявить массив строк можно так:
Код
const char * const aaa[] = {
"123",
"aaaaaa",
"bbbbbbbbbb"
};

Доступ к строкам через aaa[i].
Строки, если они все разные(привет оптимизатору!), лягут друг за другом разделенные нулем.
Если нужно что то другое задайте вопрос точнее ( что там за lChTablMax ?)

По поводу оптимизатора - компилятор если видет одинаковые строки, то в память кладет только одну копию, а указатели прописывает в массив одинаковые. Как это зависит от праметров оптимизации надо проверять на кошках.
Old1
Цитата(zltigo @ Aug 2 2006, 10:26) *
Цитата

Имею желание объявить массив строк с переменной длиной

Массив по тому и "маcсив", что однородный. Посему массивом может быть только массив указателей на строки, что Вам здесь и показали, как сделать.


Цитата(Old1 @ Aug 2 2006, 09:38) *
Чтобы все легло во flash сделайте так:
Код
__flash char *TablNames[]={
  "44444444444444",
  "555555555555555",
  "66666666666666666666",
  "7777777777777777777777"
};

Кстати, для _моего_ развития в части незнакомых мне AVRовских заморочек - то что указатели лягут во
FLASH, это ясно. А вот на счет тела строк - уверены?

Насчет "все" я был не прав. Тела строк лягут в СРАМ. Но вот так ляжет все во flash:
Код

__flash char __flash *TablNames[]={
  (char __flash *)"44444444444444",
  (char __flash *)"555555555555555",
  (char __flash *)"66666666666666666666",
  (char __flash *)"7777777777777777777777"
};

Чтобы работало надо компилятору еще ключь указать: --string_literals_in_flash.
GetSmart
Как много ответов :>)
1. Как положить во флэш и создать при этом массив указателей я как бы знал. Посему вариант Гостя, Old1 и Diper'a у меня оставлен на "провал операцыы Ы".

2. Что такое lChTablMax ? - Это число количества строк в массиве. Число должен прописывать я, а не компилятор. Число не больше 255.

3. Вариант Rst7 в каком-то смысле самый идеальный. Но строк может быть много и длиной до 50 символов. Хотя может и длиной 0. Скажите, можно описание одной этой длинной строки разбить на столько строк в тексте, сколько будет отдельных строк в общей? Через обратный слэш?

Цитата(zltigo)
Массив по тому и "маcсив", что однородный.
Конечно однородный. Все элементы имеют тип char. Должны иметь. Так что, ничего невозможного я не требую smile.gif

А вообще-то для АРМа требуется. Но компилер ведь такой же. Кроме как __flash на const поменять и всё.
diper
Задачу так и не описал cranky.gif
Будем гадать дальше - так пойдет?
Код
#include <stdio.h>
const char * const aaa[] = {
(char const *)3,
"123",
"aaaaaa",
"bbbbbbbbbb",
};


int main( void )
{
  int i;
  for(i=0;i<(int)aaa[0]; i++)
    printf(aaa[i+1]);
  return 0;
}


По поводу разбить на строки
Код
const char * fff =
"12345\0"
"abcdef\0"
"aaaaa\0"
"bbbbb\0"
;

Цитата
Ну и на Си, конечно! Через указатели как-то криво всё получается. В смысле больше места занимает.

Не так уж и много - по int на каждую строчку.
rezident
GetSmart, ты бы сказал, что тебе это надо для описания меню. И чем тебя обратный слэшь в виде разделителя не устраивает? И наглядность есть и все по стандарту СИ будет.
GetSmart
rezident
Это не для меню. Это для названий таблицы числовых констант. Сами константы можно менять, а вот строки - это ремарки (то есть их описание) и они не будут меняться, а будут лежать прибитые к программе намертво.

diper
По 4 байта теряется. По 4 !

Цитата
По поводу разбить на строки

Чудно смотрится. А можно как-то через define выделить номер строки текстового редактора? Или как иначе, типа этого:
Код
#define startLine This_IDE_line
const char * fff =
#define FirstConst ((This_IDE_line - startLine) >> 1)
"12345\0"
#define SecondConst ((This_IDE_line - startLine) >> 1)
"abcdef\0"
#define ThirdConst ((This_IDE_line - startLine) >> 1)
"aaaaa\0"
;

Только не говорите, что изврат полный. Это задание творческое. И кто не готов мыслить - прошу не ругаться в прямом эфире.
zltigo
Цитата(GetSmart @ Aug 2 2006, 16:30) *
Все элементы имеют тип char. Должны иметь. Так что, ничего невозможного я не требую smile.gif

Должны и все тут. Почему тогда Вы какиет-то посторонние слова типа "строка" поминаете?
Перестант говорить о строке и будет Вас счастье.
И почему не битов - тогда все и вся есть один однородный массив битов.
Понимание сути отсутствует. Начните с азов, пожалуйста!
GetSmart
zltigo
Да за кого Вы меня принимаете?! Да я... Да я... Да я пять ассемблеров знаю, во! Так что азы уже остались далееко позади.

Знаю я правила игры, и вроде как не нарушаю синтаксис.
по правилам можно написать:
Код
char massiv[10] = "abcdefgh";
А раз можно так написать, значит и присваивать байтовому массиву строки можно. А вот можно ли несколько строк в такой массив уложить - я в процессе выяснения. Ну если не ндравится, то можно первый элемент (число) "массива" убрать, но много-много строк в один массив впритык мне надо очень-очень. help me, please smile.gif
zltigo
Цитата(GetSmart @ Aug 2 2006, 17:41) *
А можно как-то через define выделить номер строки текстового редактора?

Можно, но надо почитать про __LINE__, __FILE__, __DATE__, __TIME__



Цитата
zltigo
Да за кого Вы меня принимаете?! Да я... Да я... Да я пять ассемблеров знаю, во!

будем считать, что был просто смайлик пропущен?

Цитата
А раз можно так написать, значит и присваивать байтовому массиву строки можно. А вот можно ли несколько строк в такой массив уложить - я в процессе выяснения. Ну если не ндравится, то можно первый элемент (число) "массива" убрать, но много-много строк в один массив впритык мне надо очень-очень. help me, please smile.gif

Код
massiv[] =
"ofigennaja\0" \
"meshanina iz baitov\0kotorie\0"   \
"mozno izvrativshis" " ispolzovat"  \
" kak stroki";
GetSmart
Супер!
Компилер съел и не поперхнулся! Ура zltigo!

Всем спасибо! Все свободны!

Только ещё одын маленький вопрос:
Как вставить первым байтом число?
Например в Паскале я бы мог написать
Код
str:string = #15 + "abcdef"
или даже так
str:string = chr(cnt) + "abcdef"
Ну а в Си как? Число - не переменная, а просто число или #define
zltigo
Цитата(GetSmart @ Aug 2 2006, 18:37) *
Ну а в Си как?

В предыдущем примере вставлены числа 0 :-)
Дальше подсказка нужна? Правда разборка такой мешанины бывает не без проблем,
например, если захотите вставить "число" = 3 а за ним литерал "3".
Форма /x12 тоже допустима. А вообще через запятую, естественно можно
15, "absdef"

А книжку почитайте - надо!
rezident
Цитата(GetSmart @ Aug 2 2006, 21:37) *
Как вставить первым байтом число?

Дык если его размерность не превышает байта, то и записывай его непосредственно. Если же превышает, то дели на байты.
1234=0x4D2 будет как
Код
massiv[] =
0x04, 0xD2,
"ofigennaja\0" \
"meshanina iz baitov\0kotorie\0"   \
"mozno izvrativshis" " ispolzovat"  \
" kak stroki";
GetSmart
Ещё вопросик созрел:
Какой максимальной длины можно создать строку внутри компилятора?

zltigo
Вы бы сами почитали книжку. Ну или поспорили с компилятором. Потому как ему не нравися ваше второе описание. Это то, которое и rezident предложил.

Так что не один я тут такой smile.gif

PS. А как писать внутри строки простым числом - я знал. Но это не то.
rezident
Цитата(GetSmart @ Aug 2 2006, 22:08) *
zltigo
Вы бы сами почитали книжку. Ну или поспорили с компилятором. Потому как ему не нравися ваше второе описание. Это то, которое и rezident предложил.

Так что не один я тут такой smile.gif

Это видимо потому, что строка не заключена в фигурные скобки.
zltigo
Цитата(GetSmart @ Aug 2 2006, 19:08) *
Вы бы сами почитали книжку.

Спасибо! Пошел читать.
Писать больше не буду.
Все.
GetSmart
Ладно, с числом в первом байте какое-то настоящее извращение. Не буду так делать.

Зато собираюсь объявлять подобные строки в макросах в любом месте текста. Как думаете, получится?
Типа вот этого:
Код
#define StartNameId 0
#define StartNameStr ""
#define AddNewNameId(a,B)  ...

И далее в тексте:

AddNewNameId(FirstNameId, "Ля-ля-ля, тополя");

Ну а в конце будет объявлено это:

const char massiv[] = StartNameStr;

Хотя, сомнения меня одолевают... Можно ли так в Си. В асме я примерно так делал.

rezident
Не-а. Это потому, что типы всё-таки разные. Примерно так: int и char * не могут находиться в одном массиве.

zltigo
Потом почитаете smile.gif Помогите сначала чем сможете.
Мне в отпуск пора, блин. А программа ещё далеко не готова. Меня ж с работы не отпустят. А вот билеты-то уже куплены.
rezident
Цитата(GetSmart @ Aug 2 2006, 22:32) *
Мне в отпуск пора, блин. А программа ещё далеко не готова. Меня ж с работы не отпустят. А вот билеты-то уже куплены.

Млин, и ты в отпуск? А мы с директором вдвоем остаемся? А я когда же? blink.gif В "меховой сезон" что ли? w00t.gif
P.S. что-то ни один твой проект у меня в ИАР 4.40 не компилируется cranky.gif
GetSmart
Я вобщем-то попробывал вот так:
Код
const xByte ChTablNames[] =
  "\250"\
  "ofigennaja\0"\
  "meshanina iz baitov\0kotorie\0"\
  "mozno izvrativshis" " ispolzovat"\
  " kak stroki";

Так можно писать даже если во второй строке первым символом будет цифра. Минус только в том, что какая-то странная перекодировка этих цифр получается. Вместо 250 в бинарнике лежит 168 (0хА8).
diper
восьмеричное 250 == десятичному 168 == шестнадцатеричному A8

ЗЫ в конце строк слеши можно убрать...
GetSmart
Цитата(rezident)
А мы с директором вдвоем остаемся? А я когда же?

Да прибудет с вами создатель...RKSV !
Ну и студент в помошниках (на побегушках).

А по поводу 4.40 я даже не в курсах. На машине глав.констр. стоит 4.20 и там всё компилица!
rezident
У меня на такую комбинацию компилятор (для MSP430) не ругается.
Код
const unsigned char ChTablNames[] = "\xFA" \
"ofigennaja\0"\
"meshanina iz baitov\0kotorie\0"\
"mozno izvrativshis" " ispolzovat"\
" kak stroki";
GetSmart
diper
Благодарю!

rezident
У меня тоже. И без слэшей в конце.

Всё-таки кто-нибудь знает, сколько максимальная длина строки в ИАРе?
___________

Хотя длину строки 19000 символов компилятор съел. А больше мне не надо.
GetSmart
Спецы!
Всё-таки можно сделать так, как описано в посте №22
А ?
_Bill
Цитата(GetSmart @ Aug 2 2006, 18:05) *
zltigo
Да за кого Вы меня принимаете?! Да я... Да я... Да я пять ассемблеров знаю, во! Так что азы уже остались далееко позади.

Знаю я правила игры, и вроде как не нарушаю синтаксис.
по правилам можно написать:
Код
char massiv[10] = "abcdefgh";
А раз можно так написать, значит и присваивать байтовому массиву строки можно. А вот можно ли несколько строк в такой массив уложить - я в процессе выяснения. Ну если не ндравится, то можно первый элемент (число) "массива" убрать, но много-много строк в один массив впритык мне надо очень-очень. help me, please smile.gif

Уложить-то можно. Как только к ним доступ иметь будете?
Код
char       strings[] = {
                       "string1"
                       "string2"
                       "string3"
                       };

Будете количество ограничителей строк считать?
GetSmart
Да, да. Я буду нули считать. Тем более, что вход в меню всегда происходит с нулевой строки и адреса, а при листании перейти на следующую строку или предыдущую элементарно. Сложностей с этим нет, хоть с учазателями чуть-чуть попроще. Но сэкономить можно до килобайта при том, что у меня планируется 240 строк.

Вот через удобные и красивые макросы кто бы подсказал как сделать.
diper
Цитата(GetSmart @ Aug 2 2006, 21:38) *
Вот через удобные и красивые макросы кто бы подсказал как сделать.
А ответ - "это невозможно" - устроит?

Но коль пошла такая пьянка предлагаю такой вариант:
Код
#define Add(Z) #Z##"\0"

const char massiv1[] =
#include "data1.h"
;


data1.h содержит строки
Код
Add( 12345 )
Add( aaaaa )
Add( bbbbbbb )
Add( ccccc ccccc )


После препроцессора получится
Код
const char massiv1[] =
"12345""\0"
"aaaaa""\0"
"bbbbbbb""\0"
"ccccc ccccc""\0"
;
zltigo
Цитата(_Bill @ Aug 2 2006, 21:17) *
Код
char       strings[] = {
                       "string1"
                       "string2"
                       "string3"
                       };

Будете количество ограничителей строк считать?

Не надо считать. Их там просто нет - Вы положили ОДНУ строку.
Правильный ответ был уже дан ранее.

P.S.
Обещал не писать, но не удержался :-( грешен - не могу молчать когда результат называют "Массивом строк с переменной длинной". Ну просто уши вянут!
GetSmart
Цитата(diper)
А ответ - "это невозможно" - устроит?

Для нас нет ничего невозможного! Боюсь только этой фразой затмить Вас smile.gif
Не, ну это уже слишком хорошо, чтобы быть правдой. Хотя провирил, работает! (Бабушка, ты - гений! (с))

Один маленький вопрос: что означают решётки в дефайне?

zltigo
А как правильно?

P.S. Вы чего там исправили в чужом посте? Как Вам не стыдно?
zltigo
Цитата(GetSmart @ Aug 2 2006, 23:35) *
zltigo
А как правильно?

Массив char. Вот так просто и безвариантно. Поскольку именно так и написано
"char eprst[]".

А вопрос, например, как инициализировать массив char набором строк.

Цитата
P.S. Вы чего там исправили в чужом посте? Как Вам не стыдно?

Если Автор поста имеет претензии, он естествено может их высказать.
GetSmart
"Имею желание инициализировать массив char набором строк"

По смыслу и вправду точнее. Если у кого есть права изменения названий - разрешаю поменять. Даже прошу. Нет, это слишком. Вобщем где-то между ними. Второе название прошу оставить как есть.

Ну теперь-то точно:
Всем спасибо, все свободны!

PS. С решетками разобрался. Это замена кавычек в дефайне.
zltigo
Цитата(GetSmart @ Aug 3 2006, 00:05) *
PS. С решетками разобрался. Это замена кавычек в дефайне.

НЕЕЕЕЕЕЕЕЕЕЕЕT!!!!
RTFM, неужели трудно? Заодно, лично мне, не нравится в таком варианте
Цитата
#define Add(Z) #Z##"\0"

невозможность иметь пробелы в начале и конце строки, и лишение строки ее естественных "".
Убрать 'лишний' # и добавить "" строчкам. Заодно шальные предположения об операторах # и ##
отпадут.

Цитата(GetSmart @ Aug 3 2006, 00:05) *
"Имею желание инициализировать массив char набором строк"

Если у кого есть права изменения названий - разрешаю поменять.

Нет, тогда получится, что несколько 'лохов' пытались нести чушь в ответ на четко заданный вопрос.
Нет.
GetSmart
Цитата(zltigo)
тогда получится, что несколько 'лохов' пытались нести чушь в ответ на четко заданный вопрос.

На какой вопрос?

Да и название - всего лишь приманка. Оно не обязано содержать смысл один-в-один. Тем более, что по ходу темы она же может отклониться от курса. Например, если кто-нибудь предложит более идеальный вариант решения.
zltigo
Цитата(GetSmart @ Aug 3 2006, 00:40) *
Цитата(zltigo)
тогда получится, что несколько 'лохов' пытались нести чушь в ответ на четко заданный вопрос.

На какой вопрос?

На вопрос поставленный Вами.
В данном случае поставленный вопрос был бессмыленнен по форме и не ясен по сути.
И начало топика сводилось к выяснению того о чем вообще идет речь. При замене темы, начало будет
смотреться более чем глупо.
GetSmart
Цитата(zltigo)
.. в ответ на четко заданный вопрос.
...
В данном случае поставленный вопрос был бессмыленнен по форме и не ясен по сути.

Чё-то у меня ума не хватает, чтобы вот это понять. Но я исходил из того, что я знаю как сделать массив указателей на строки разной длины. И нужно было просто избавиться от указателей.

Цитата
тогда получится, что несколько 'лохов' пытались нести чушь в ответ на четко заданный вопрос.

Надо будет это запомнить. Вдруг когда пригодится.

Ржунимагу!
Я долго искал ошибку в варианте diper'а, на которую указал zltigo. После чего обнаружил, что он тайком исправил претензию к ней на это:
Цитата
Заодно, лично мне, не нравится в таком варианте
zltigo
Цитата(GetSmart @ Aug 3 2006, 01:43) *
Ржунимагу!

Если можно, то без подобных проявлений эмоций - у меня к ним идиосинкразия с некоторых пор.

Цитата
Я долго искал ошибку в варианте diper'а, на которую указал zltigo. После чего обнаружил, что он тайком исправил претензию к ней на это:
Цитата
Заодно, лично мне, не нравится в таком варианте


Виноват, собрался мгновенно добавить "стилистическую", но был отвлечен на полчаса другим делом :-(.
GetSmart
Цитата(zltigo)
Если можно, то без подобных проявлений эмоций - у меня к ним идиосинкразия с некоторых пор.
Конечно можно. Как и без 'лохов' тоже можно было. К которым уже у меня идиосинкразия. Так что вырвалось по независящим от меня причинам.

Кстати, я сам сразу исправил его вариант на такой, который Вы в последствии написали. Хотя, формально, diper и не допускал ошибки. Мой компилятор это подтвердит. Просто ему так лучше показалось.
GetSmart
Привожу окончательную версию:
Основная программа:
Код
const char TablNames[] =
#include "names.h"
;
Файл names.h
Код
#define add(a) a"\0"

add("Название первой строки")
add("Название второй строки")
add("Название третьей строки")

#undef add

Получилось очень даже красиво и идеально. В конце массива в бинарнике будет два нуля. Что очень даже неплохо и можно использовать как признак конца всех строк.
_Bill
Цитата(zltigo @ Aug 2 2006, 22:43) *
Цитата(_Bill @ Aug 2 2006, 21:17) *

Код
char       strings[] = {
                       "string1"
                       "string2"
                       "string3"
                       };

Будете количество ограничителей строк считать?

Не надо считать. Их там просто нет - Вы положили ОДНУ строку.
Правильный ответ был уже дан ранее.

Да, да. Я тут был неправ.

Цитата(GetSmart @ Aug 2 2006, 19:51) *
Я вобщем-то попробывал вот так:
Код
const xByte ChTablNames[] =
  "\250"\
  "ofigennaja\0"\
  "meshanina iz baitov\0kotorie\0"\
  "mozno izvrativshis" " ispolzovat"\
  " kak stroki";

Так можно писать даже если во второй строке первым символом будет цифра. Минус только в том, что какая-то странная перекодировка этих цифр получается. Вместо 250 в бинарнике лежит 168 (0хА8).

Ну, правильно. '\250' это число в восьмеричной системе счисления. Можно использовать также 16-ричную систему счисления: '\xA8'.
GetSmart
_Bill
Мне бы десятичную. Мона?
_Bill
Цитата(GetSmart @ Aug 3 2006, 08:17) *
_Bill
Мне бы десятичную. Мона?

Нет!! Тут либо 8, либо 16. А почему именно 10?
GetSmart
Да наверное уже просто на будущее. Потому как в этой задаче я передумал первым байтом помещать число строк. А вообще, писать удобней в десятичной такие числа как количество чего-то.

Тот, кто решил делать в восьмеричной был наверно очень умным. Или я что-то не понимаю?

PS. А была такая хорошая концовка smile.gif
zltigo
Цитата(GetSmart @ Aug 3 2006, 03:06) *
#define add(a) a"\0"

#define add(a) a##"\0"
Более читабельно, поскольку явно выражает цель.
_Bill
Цитата(GetSmart @ Aug 3 2006, 09:10) *
Да наверное уже просто на будущее. Потому как в этой задаче я передумал первым байтом помещать число строк. А вообще, писать удобней в десятичной такие числа как количество чего-то.

Тот, кто решил делать в восьмеричной был наверно очень умным. Или я что-то не понимаю?

PS. А была такая хорошая концовка smile.gif

Ну, выбор 8-ричной системы счисления был сделан по причинам исторического характера. Но это уже другая история. Что касается Вашего случая, то я бы организовал массив строк переменной длины в виде массива указателей на них, как Вам советовали выше. Причем, в качестве ограничителя таблицы удобно использовать признак NULL (0). Тогда можно обойтись и без знания количества строк в таблице. Можно и не пользоваться ограничителем таьлицы, а определять количество строк через оператор sizeof.
GetSmart
_Bill
Спасибо, я был в курсе этого варианта. Я спец по алгоритмам. Просто самый последний язык, который я выучил - это СИ. Ну, точнее асм для АРМа был последний. Вот синтаксис СИ я пока знаю не весь. Поэтому затеял этот топик для самообразования на конкретном примере. Сравнив все плюсы и минусы обоих вариантов я счёл нужным выбрать этот. И не ошибся в правильности. Скорее даже исполнились мои самые лучшие ожидания.

zltigo
Думаю Вы ещё что-нибудь предложите в таком же духе. Не забудьте про слово "стилистический". Оно здОрово выручает в подобных ситуациях.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.