|  | 
| 
Си объеденить более двух строк. | |||
|---|---|---|---|
| #18+ Добрый вечер. Вопрос по чистому Си. Надо сделать строку и текста и нескольких переменных. Типа такой: "server=127.0.0.1 login=admin" 127.0.0.1 и admin взять из переменных. так работает: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Но, можно ли как-то за одну операцию объединить несколько строк, а не использовать много раз strcat? ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 23.01.2022, 22:40 |  | ||
| 
Си объеденить более двух строк. | |||
|---|---|---|---|
| #18+ И второй вопрос, совсем простой. Присвоить значение строке почему-то получается только при объявлении переменной. Если написать в функции: ip_var="127.0.1.1"; то ошибка: error: incompatible types when assigning to type ‘char[1024]’ from type ‘char *’ ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 23.01.2022, 22:45 |  | ||
| 
Си объеденить более двух строк. | |||
|---|---|---|---|
| #18+ Когда-то давным-давно, когда Си был ещё Кернигана и Ричи, в нём существовали  функции concat() и strrcpy(), которые делали в точности то, что ты хочешь. С тех пор их выпилили. Теперь рекомендуют С++: Код: sql 1. Posted via ActualForum NNTP Server 1.5 ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 23.01.2022, 23:30 |  | ||
| 
Си объеденить более двух строк. | |||
|---|---|---|---|
| #18+ Уткъ, printf выводит по шаблону сколько угодно аргументов, аргументы через запятую после Шаблона Код: plaintext 1. Код: plaintext 1. 2. 3. 4. ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 23.01.2022, 23:43 |  | ||
| 
Си объеденить более двух строк. | |||
|---|---|---|---|
| #18+ Насколько помню, sprintf/snprintf пока еще с нами. ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 23.01.2022, 23:54 |  | ||
| 
Си объеденить более двух строк. | |||
|---|---|---|---|
| #18+ Функциональный стиль в сях не работает обычно. Поэтому композицию нескольких кон-катов не получается  сделать в каком-то достойном и безопасном стиле. Strcat как результат возвращает первую строку. Вот вариант. Код: plaintext 1. 2. 3. 4. 5. Но не расслабляйся. Чекай в дебаге с valgrind каждое подобное изменение кода. ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 24.01.2022, 00:29 |  | ||
| 
Си объеденить более двух строк. | |||
|---|---|---|---|
| #18+ Вот такой месседж должен быть всегда. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 24.01.2022, 00:31 |  | ||
| 
Си объеденить более двух строк. | |||
|---|---|---|---|
| #18+ Уткъ Надо сделать строку и текста и нескольких переменных. Типа такой: "server=127.0.0.1 login=admin" 127.0.0.1 и admin взять из переменных. Самое простое, выделить приемный буфер в максимальный размер итоговой строки: Код: plaintext 1. 2. 3. 4. ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 24.01.2022, 04:53 |  | ||
| 
Си объеденить более двух строк. | |||
|---|---|---|---|
| #18+ Dimitry Sibiryakov Когда-то давным-давно, когда Си был ещё Кернигана и Ричи, в нём существовали функции concat() и strrcpy(), которые делали в точности то, что ты хочешь. С тех пор их выпилили. Теперь рекомендуют С++: Код: sql 1. надо имеено по Си, не С++ ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 24.01.2022, 10:28 |  | ||
| 
Си объеденить более двух строк. | |||
|---|---|---|---|
| #18+ Alex_Ustinov Уткъ, printf выводит по шаблону сколько угодно аргументов, аргументы через запятую после Шаблона Код: plaintext 1. Код: plaintext 1. 2. 3. 4. Это-то понятно, но мне надо это склееную строку в коде еще использовать. ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 24.01.2022, 10:29 |  | ||
| 
Си объеденить более двух строк. | |||
|---|---|---|---|
| #18+ mayton Функциональный стиль в сях не работает обычно. Поэтому композицию нескольких кон-катов не получается  сделать в каком-то достойном и безопасном стиле. Strcat как результат возвращает первую строку. Вот вариант. Код: plaintext 1. 2. 3. 4. 5. Но не расслабляйся. Чекай в дебаге с valgrind каждое подобное изменение кода. Спасибо! Только на счет valgrind пока ничего не знаю. Я в блокнотике пишу код, потом копирую на сервер и компию через gcc. Тут наверное про ide какой-нить. Если как-то по-другому можно, скажите ) ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 24.01.2022, 10:32 |  | ||
| 
Си объеденить более двух строк. | |||
|---|---|---|---|
| #18+ White Owl Уткъ Надо сделать строку и текста и нескольких переменных. Типа такой: "server=127.0.0.1 login=admin" 127.0.0.1 и admin взять из переменных. Самое простое, выделить приемный буфер в максимальный размер итоговой строки: Код: plaintext 1. 2. 3. 4. Функция sprintf используется для записи форматированной строки в буфер символьной строки. Похоже она как раз склеивает строку и это то что надо, спасибо! ...буду экспериментировать... ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 24.01.2022, 10:34 |  | ||
| 
Си объеденить более двух строк. | |||
|---|---|---|---|
| #18+ Уткъ Только на счет valgrind пока ничего не знаю. Я в блокнотике пишу код, потом копирую на сервер и компию через gcc. Тут наверное про ide какой-нить. Если как-то по-другому можно, скажите ) Если ты Windows девелопер то возможно там какие-то другие тулзы но смысл такой-же. Блокнот или IDE - это вопрос вкусов. Мой пример я написал в редакторе Atom. То что ты там что-то "копируешь на сервер" - вызывает удивление. В наше время, в эпоху виртуалок и докеров уже можно весь техно-стек компилляции создать на рабочем ноутбуке. ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 24.01.2022, 11:45 |  | ||
| 
Си объеденить более двух строк. | |||
|---|---|---|---|
| #18+ Уткънадо имеено по Си, не С++ Если пишешь для микроконтроллера - проверь-таки наличие в системных библиотеках функции strrcpy. Если нет - не парься и используй каскад strcat. Низкоуровневая оптимизация - пока что не твой уровень. ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 24.01.2022, 14:12 |  | ||
| 
Си объеденить более двух строк. | |||
|---|---|---|---|
| #18+ mayton Уткъ Только на счет valgrind пока ничего не знаю. Я в блокнотике пишу код, потом копирую на сервер и компию через gcc. Тут наверное про ide какой-нить. Если как-то по-другому можно, скажите ) Если ты Windows девелопер то возможно там какие-то другие тулзы но смысл такой-же. Блокнот или IDE - это вопрос вкусов. Мой пример я написал в редакторе Atom. То что ты там что-то "копируешь на сервер" - вызывает удивление. В наше время, в эпоху виртуалок и докеров уже можно весь техно-стек компилляции создать на рабочем ноутбуке. Понял. Пока буду в блокноте писать. Нравится что никаких студий ставить не надо ) ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 24.01.2022, 15:25 |  | ||
| 
Си объеденить более двух строк. | |||
|---|---|---|---|
| #18+ Dimitry Sibiryakov Уткънадо имеено по Си, не С++ Если пишешь для микроконтроллера - проверь-таки наличие в системных библиотеках функции strrcpy. Если нет - не парься и используй каскад strcat. Низкоуровневая оптимизация - пока что не твой уровень. Это под линукс. Учту, спасибо ) ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 24.01.2022, 15:25 |  | ||
| 
Си объеденить более двух строк. | |||
|---|---|---|---|
| #18+ А все же, как переменной присвоить значение непосредственно в программе? типа ip_var="127.0.1.1"; по идее sprintf присваивать может, но это для сложной строчки. А если совсем простое присваивание то как можно сделать? ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 24.01.2022, 15:27 |  | ||
| 
Си объеденить более двух строк. | |||
|---|---|---|---|
| #18+ Уткъ, я не знаю что у тебя за компиллятор. Но попробуй так. Должно работать. Код: plaintext 1. 2. 3. 4. 5. Присвоение указателю чего-то. Потом - пере-присвоение. Но в эти переменные уже нельзя будет конкатенировать потому что алоцировано ровно столько байтов сколько букв. Ну и +1 символ нуля "\0" (ASCIIZ) ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 24.01.2022, 15:35 |  | ||
| 
Си объеденить более двух строк. | |||
|---|---|---|---|
| #18+ White Owl Уткъ Надо сделать строку и текста и нескольких переменных. Типа такой: "server=127.0.0.1 login=admin" 127.0.0.1 и admin взять из переменных. Самое простое, выделить приемный буфер в максимальный размер итоговой строки: Код: plaintext 1. 2. 3. 4. Тут sprintf тоже возвращает полезный результат. Можно его взять. Типа. Код: plaintext 1. 2. 3. 4. Еще хорошо-бы избавиться от этого вредного буфера с размером (с хера-ли?) 1024. Псевдо-код. Печатам в пустоту. С подсчетом. Аллоцируем точный размер. И печатаем второй раз. Код: plaintext 1. 2. 3. 4. 5. ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 24.01.2022, 15:59 |  | ||
| 
Си объеденить более двух строк. | |||
|---|---|---|---|
| #18+ mayton Еще хорошо-бы избавиться от этого вредного буфера с размером (с хера-ли?) 1024. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. А если лень перечислять переменные - то массивы указателей и циклы спасут. А еще переменные можно оформить как va_list массив и vsnprintf() всегда к услугам. А любители С++ с его string+string могут написать себе расширение для strcat(): Код: plaintext 1. 2. 3. 4. 5. 6. mayton Псевдо-код. Печатам в пустоту. С подсчетом. Аллоцируем точный размер. И печатаем второй раз. ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 24.01.2022, 16:40 |  | ||
| 
Си объеденить более двух строк. | |||
|---|---|---|---|
| #18+ White Owl Код: plaintext 1. Автору можно предложить varargs. Сколько у него там строк? 3 или 4. ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 24.01.2022, 16:44 |  | ||
| 
Си объеденить более двух строк. | |||
|---|---|---|---|
| #18+ maytonПсевдо-код. Печатам в пустоту. С подсчетом. Аллоцируем точный размер. И печатаем  второй раз. А что мешает печатать сразу второй раз куда нужно (и это "куда нужно" обычно таки не буфер в памяти)? Синдром Натальи Хлопотун?.. Posted via ActualForum NNTP Server 1.5 ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 24.01.2022, 16:47 |  | ||
| 
Си объеденить более двух строк. | |||
|---|---|---|---|
| #18+ Dimitry Sibiryakov Зришь в корень. Давай (в С++) постулируем алгебру ленивых строк. Что-б не конкатенировались вовсе. Вот такая у меня мысль. ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 24.01.2022, 16:51 |  | ||
| 
Си объеденить более двух строк. | |||
|---|---|---|---|
| #18+ Легко: Код: sql 1. 2. Posted via ActualForum NNTP Server 1.5 ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 24.01.2022, 17:00 |  | ||
|  | 

| start [/forum/topic.php?fid=57&msg=40128893&tid=2017136]: | 0ms | 
| get settings: | 10ms | 
| get forum list: | 14ms | 
| check forum access: | 3ms | 
| check topic access: | 3ms | 
| track hit: | 42ms | 
| get topic data: | 10ms | 
| get forum data: | 2ms | 
| get page messages: | 55ms | 
| get tp. blocked users: | 1ms | 
| others: | 15ms | 
| total: | 155ms | 

| 0 / 0 | 
