реклама на сайте
подробности

 
 
4 страниц V  « < 2 3 4  
Reply to this topicStart new topic
> Имею желание объявить массив строк с переменной длиной, Но не имею возможности :-(
_Bill
сообщение Aug 3 2006, 05:36
Сообщение #46


Местный
***

Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219



Цитата(GetSmart @ Aug 3 2006, 08:17) *
_Bill
Мне бы десятичную. Мона?

Нет!! Тут либо 8, либо 16. А почему именно 10?
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Aug 3 2006, 06:10
Сообщение #47


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



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

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

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


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 3 2006, 06:13
Сообщение #48


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(GetSmart @ Aug 3 2006, 03:06) *
#define add(a) a"\0"

#define add(a) a##"\0"
Более читабельно, поскольку явно выражает цель.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
_Bill
сообщение Aug 3 2006, 06:27
Сообщение #49


Местный
***

Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219



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

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

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

Ну, выбор 8-ричной системы счисления был сделан по причинам исторического характера. Но это уже другая история. Что касается Вашего случая, то я бы организовал массив строк переменной длины в виде массива указателей на них, как Вам советовали выше. Причем, в качестве ограничителя таблицы удобно использовать признак NULL (0). Тогда можно обойтись и без знания количества строк в таблице. Можно и не пользоваться ограничителем таьлицы, а определять количество строк через оператор sizeof.
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Aug 3 2006, 06:40
Сообщение #50


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



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

zltigo
Думаю Вы ещё что-нибудь предложите в таком же духе. Не забудьте про слово "стилистический". Оно здОрово выручает в подобных ситуациях.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
_Bill
сообщение Aug 3 2006, 06:44
Сообщение #51


Местный
***

Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219



Цитата(GetSmart @ Aug 3 2006, 09:40) *
_Bill
Скорее даже исполнились мои самые лучшие ожидания.

Ну и замечательно!!!
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 3 2006, 07:38
Сообщение #52


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(GetSmart @ Aug 3 2006, 02:23) *
Цитата(zltigo)
Если можно, то без подобных проявлений эмоций - у меня к ним идиосинкразия с некоторых пор.
Конечно можно. Как и без 'лохов' тоже можно было.


Вот и без 'лохов' ТОЖЕ. Это определение к Вам здесь не употреблялось, а именно Ваш стиль общения
у меня, увы, теперь вызывает :-( некоторые ассоциации с нашим seeаttack.
Он заходя на форумы задавал невнятные вопросы после ответов заявлял, что все это и так знал и зачастую не поняв ответа рекомендовал всем учиться, выдавал краткую характеристику участикам и удалялся обещая вернуться с лекцией о зимовке раков. Упаси Бог, я Вас с ним НЕ РОВНЯЮ, но некоторые ассоциации вызывающие дискомфорт в общении в таком стиле у меня есть.
Прежде всего, если задали вопрос - сочтите за труд выслушать и ПОНЯТЬ ответ. А не дав себе труда даже разобратся бросаться подобными репликами:
Цитата
zltigo
Вы бы сами почитали книжку. Ну или поспорили с компилятором. Потому как ему не нравися ваше второе описание. Это то, которое и rezident предложил.

В ответ на совершенно правильную рекомендацию по вопросу:
Цитата
Только ещё одын маленький вопрос:
Как вставить первым байтом число?

, которой Вы даже не сумели воспользоваться.
Код
char string[] =
{    100,101,102,"eprst"

};


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Aug 3 2006, 08:36
Сообщение #53


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(zltigo)
, которой Вы даже не сумели воспользоваться.
Код
char string[] =
{    100,101,102,"eprst"

};

А это должно работать? У меня в компилере не работает почему-то.

Цитата
Вот и без 'лохов' ТОЖЕ. Это определение к Вам здесь не употреблялось, а именно Ваш стиль общения
у меня, увы, теперь вызывает :-( некоторые ассоциации с нашим seeаttack.
На счёт 'лохов' - я знаю. Только укажите - кто из них? А то я сам не догадаюсь.

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

Дискомфорт...
А вообще, комплексы есть у всех. Тока надо с ними бороться.

А я уж думал закончить тему на очень удачной ноте. Не судьба видно.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 3 2006, 09:01
Сообщение #54


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(GetSmart @ Aug 3 2006, 11:36) *
Только укажите - кто из них? А то я сам не догадаюсь.

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

Надеюсь с третьего раза удалось догадаться?

Цитата
А это должно работать? У меня в компилере не работает почему-то.

Безвариантно работает первый вариант с "/15qwerty".
У второго нет особых причин не работать, но разработчики конкретного компилятора могут иметь свое
мнение.

Цитата(GetSmart @ Aug 3 2006, 11:36) *
Я же честно написал в заглавии топика, что знаю как сделать через указатели. Потом честно написал, что хочу сделать через макросы, но не знаю как. Я где-то соврал? Название не самое удачное? Но ведь не полное враньё.

1.Слово "вранье" мною не упоминалось.
2.Возражения были ИСКЛЮЧИТЕЛЬНО по вопросу ПОСТФАКТУМ изменению названия топика,
причем с объяснением причины:
Цитата
тогда получится, что несколько 'лохов' пытались нести чушь в ответ на четко заданный вопрос.

, почему-то вызвавшим безудержное веселье.

Сообщение отредактировал zltigo - Aug 3 2006, 09:04


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Aug 3 2006, 09:28
Сообщение #55


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



zltigo
Я понял это как ругательство к остальным. Обычно так не говорят. Раз я ошибся - прошу прощения!
Мог бы даже пообещать не язвить впредь, только это очень сложно и боюсь не удержусь smile.gif

Надеюсь инцендент исчерпан.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 3 2006, 09:54
Сообщение #56


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(GetSmart @ Aug 3 2006, 12:28) *
zltigo
Надеюсь инцендент исчерпан.

Абсолютно.
Насчет язвительности, то это в полной мере относится и ко мне :-(. Похоже это возрастное, прошу
учитывать при личном общении :-)

К вопросу о
char string[] =
{ 100,101,102,"eprst"

};
1. IAR выругался
2. Watcom сделал все "правильно".

Кто из них больше прав? При пристальном рассмотрении даже не знаю.
Watcom поступает более привычно и по "человечески" естественнее и исходя из того,
что мы занимается инициализацией массива и указание на то, что массив байтовый естественнейшим образом требует помещения в него содержимого строки а не указателя на нее, что и делает без лишних вопрорсов.
Подход IAR, более формален, поскольку "string" есть указатель на него, то чего-же его мне суете
место байта? А вариант char string[] = "eprst", я пропущу, поскольку это подпадает под инициализацию указателя, а не массива. Я бы сейчас был за компромис - поступить как Watcom, но выдать Warning (не ошибку!).


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
_Bill
сообщение Aug 3 2006, 10:19
Сообщение #57


Местный
***

Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219



Цитата(zltigo @ Aug 3 2006, 12:54) *
Цитата(GetSmart @ Aug 3 2006, 12:28) *

zltigo
Надеюсь инцендент исчерпан.

Абсолютно.
Насчет язвительности, то это в полной мере относится и ко мне :-(. Похоже это возрастное, прошу
учитывать при личном общении :-)

К вопросу о
char string[] =
{ 100,101,102,"eprst"

};
1. IAR выругался
2. Watcom сделал все "правильно".

Кто из них больше прав? При пристальном рассмотрении даже не знаю.
Watcom поступает более привычно и по "человечески" естественнее и исходя из того,
что мы занимается инициализацией массива и указание на то, что массив байтовый естественнейшим образом требует помещения в него содержимого строки а не указателя на нее, что и делает без лишних вопрорсов.
Подход IAR, более формален, поскольку "string" есть указатель на него, то чего-же его мне суете
место байта? А вариант char string[] = "eprst", я пропущу, поскольку это подпадает под инициализацию указателя, а не массива. Я бы сейчас был за компромис - поступить как Watcom, но выдать Warning (не ошибку!).

В IAR это связано, возможно, с тем, что инициализирующие строки располагаются в отдельном сегменте, нежели числовые данные. Какое сообщение компилятор выдает? Что же касается варианта
char string[] = {"eprst"};
то это один из вариантов инициализации массива типа char, эквивалентный
char string[] = {'e', 'p', 'r', 's', 't', \0};

Сообщение отредактировал _Bill - Aug 3 2006, 10:22
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 3 2006, 10:31
Сообщение #58


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(_Bill @ Aug 3 2006, 13:19) *
В IAR это связано, возможно, с тем, что инициализирующие строки располагаются в отдельном сегменте, нежели числовые данные.

Нет. Это причины общего порядка.

Цитата
Что же касается варианта
char string[] = {"eprst"};
то это один из вариантов инициализации массива типа char, эквивалентный
char string[] = {'e', 'p', 'r', 's', 't', \0};

Да, и при этом
Код
char string[] = { 15, 'e', 'p', 'r', 's', 't', \0};

Можно а
Код
char string[] = {15, "eprst"};

Нельзя, поскольку IAR компилятор считает, что это уже:
Код
char *pointer = "eprst";
char string[] = {15, pointer};


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
_Bill
сообщение Aug 3 2006, 10:43
Сообщение #59


Местный
***

Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219



Цитата(zltigo @ Aug 3 2006, 13:31) *
Да, и при этом
Код
char string[] = { 15, 'e', 'p', 'r', 's', 't', \0};

Можно а
Код
char string[] = {15, "eprst"};

Нельзя, поскольку IAR компилятор считает, что это уже:
Код
char *pointer = "eprst";
char string[] = {15, pointer};

Да, вероятнее всего, дело именно в этом.
Go to the top of the page
 
+Quote Post

4 страниц V  « < 2 3 4
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 23:55
Рейтинг@Mail.ru


Страница сгенерированна за 0.01453 секунд с 7
ELECTRONIX ©2004-2016