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

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


.
******

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



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

Вот через удобные и красивые макросы кто бы подсказал как сделать.


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


Частый гость
**

Группа: Свой
Сообщений: 94
Регистрация: 12-11-05
Из: Росиия, Нижний Новгород
Пользователь №: 10 750



Цитата(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 - Aug 2 2006, 19:47
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 2 2006, 19:43
Сообщение #33


Гуру
******

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



Цитата(_Bill @ Aug 2 2006, 21:17) *
Код
char       strings[] = {
                       "string1"
                       "string2"
                       "string3"
                       };

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

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

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


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Aug 2 2006, 20:35
Сообщение #34


.
******

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



Цитата(diper)
А ответ - "это невозможно" - устроит?

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

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

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

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


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


Гуру
******

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



Цитата(GetSmart @ Aug 2 2006, 23:35) *
zltigo
А как правильно?

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

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

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

Если Автор поста имеет претензии, он естествено может их высказать.


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


.
******

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



"Имею желание инициализировать массив char набором строк"

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

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

PS. С решетками разобрался. Это замена кавычек в дефайне.

Сообщение отредактировал GetSmart - Aug 2 2006, 21:10


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


Гуру
******

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



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

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

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

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

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

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


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Aug 2 2006, 21:40
Сообщение #38


.
******

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



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

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

Да и название - всего лишь приманка. Оно не обязано содержать смысл один-в-один. Тем более, что по ходу темы она же может отклониться от курса. Например, если кто-нибудь предложит более идеальный вариант решения.


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


Гуру
******

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



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

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

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


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Aug 2 2006, 22:43
Сообщение #40


.
******

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



Цитата(zltigo)
.. в ответ на четко заданный вопрос.
...
В данном случае поставленный вопрос был бессмыленнен по форме и не ясен по сути.

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

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

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

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


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


Гуру
******

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



Цитата(GetSmart @ Aug 3 2006, 01:43) *
Ржунимагу!

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

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


Виноват, собрался мгновенно добавить "стилистическую", но был отвлечен на полчаса другим делом :-(.


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


.
******

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



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

Кстати, я сам сразу исправил его вариант на такой, который Вы в последствии написали. Хотя, формально, diper и не допускал ошибки. Мой компилятор это подтвердит. Просто ему так лучше показалось.

Сообщение отредактировал GetSmart - Aug 2 2006, 23:45


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


.
******

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



Привожу окончательную версию:
Основная программа:
Код
const char TablNames[] =
#include "names.h"
;
Файл names.h
Код
#define add(a) a"\0"

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

#undef add

Получилось очень даже красиво и идеально. В конце массива в бинарнике будет два нуля. Что очень даже неплохо и можно использовать как признак конца всех строк.

Сообщение отредактировал GetSmart - Aug 3 2006, 00:25


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


Местный
***

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



Цитата(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'.
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Aug 3 2006, 05:17
Сообщение #45


.
******

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



_Bill
Мне бы десятичную. Мона?


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post

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

 


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


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