|
|
  |
Имею желание объявить массив строк с переменной длиной, Но не имею возможности :-( |
|
|
|
Aug 2 2006, 19:43
|
Частый гость
 
Группа: Свой
Сообщений: 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
|
|
|
|
|
Aug 2 2006, 19:43
|

Гуру
     
Группа: Свой
Сообщений: 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
|
|
|
|
|
Aug 2 2006, 20:35
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Цитата(diper) А ответ - "это невозможно" - устроит? Для нас нет ничего невозможного! Боюсь только этой фразой затмить Вас  Не, ну это уже слишком хорошо, чтобы быть правдой. Хотя провирил, работает! (Бабушка, ты - гений! (с)) Один маленький вопрос: что означают решётки в дефайне? zltigoА как правильно? P.S. Вы чего там исправили в чужом посте? Как Вам не стыдно?
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Aug 2 2006, 20:49
|

Гуру
     
Группа: Свой
Сообщений: 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
|
|
|
|
|
Aug 2 2006, 21:17
|

Гуру
     
Группа: Свой
Сообщений: 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
|
|
|
|
|
Aug 2 2006, 21:40
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Цитата(zltigo) тогда получится, что несколько 'лохов' пытались нести чушь в ответ на четко заданный вопрос. На какой вопрос? Да и название - всего лишь приманка. Оно не обязано содержать смысл один-в-один. Тем более, что по ходу темы она же может отклониться от курса. Например, если кто-нибудь предложит более идеальный вариант решения.
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Aug 2 2006, 22:07
|

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

|
Цитата(GetSmart @ Aug 3 2006, 00:40)  Цитата(zltigo) тогда получится, что несколько 'лохов' пытались нести чушь в ответ на четко заданный вопрос. На какой вопрос? На вопрос поставленный Вами. В данном случае поставленный вопрос был бессмыленнен по форме и не ясен по сути. И начало топика сводилось к выяснению того о чем вообще идет речь. При замене темы, начало будет смотреться более чем глупо.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Aug 2 2006, 22:43
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Цитата(zltigo) .. в ответ на четко заданный вопрос. ... В данном случае поставленный вопрос был бессмыленнен по форме и не ясен по сути. Чё-то у меня ума не хватает, чтобы вот это понять. Но я исходил из того, что я знаю как сделать массив указателей на строки разной длины. И нужно было просто избавиться от указателей. Цитата тогда получится, что несколько 'лохов' пытались нести чушь в ответ на четко заданный вопрос. Надо будет это запомнить. Вдруг когда пригодится. Ржунимагу! Я долго искал ошибку в варианте diper'а, на которую указал zltigo. После чего обнаружил, что он тайком исправил претензию к ней на это: Цитата Заодно, лично мне, не нравится в таком варианте
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Aug 2 2006, 22:56
|

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

|
Цитата(GetSmart @ Aug 3 2006, 01:43)  Ржунимагу! Если можно, то без подобных проявлений эмоций - у меня к ним идиосинкразия с некоторых пор. Цитата Я долго искал ошибку в варианте diper'а, на которую указал zltigo. После чего обнаружил, что он тайком исправил претензию к ней на это: Цитата Заодно, лично мне, не нравится в таком варианте Виноват, собрался мгновенно добавить "стилистическую", но был отвлечен на полчаса другим делом :-(.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Aug 2 2006, 23:23
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Цитата(zltigo) Если можно, то без подобных проявлений эмоций - у меня к ним идиосинкразия с некоторых пор. Конечно можно. Как и без 'лохов' тоже можно было. К которым уже у меня идиосинкразия. Так что вырвалось по независящим от меня причинам. Кстати, я сам сразу исправил его вариант на такой, который Вы в последствии написали. Хотя, формально, diper и не допускал ошибки. Мой компилятор это подтвердит. Просто ему так лучше показалось.
Сообщение отредактировал GetSmart - Aug 2 2006, 23:45
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Aug 3 2006, 00:06
|
.
     
Группа: Участник
Сообщений: 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
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Aug 3 2006, 04:37
|
Местный
  
Группа: Участник
Сообщений: 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'.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|