Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
3 / 3 / 0
Регистрация: 25.05.2012
Сообщений: 23

Функция изменяющая сразу несколько строк

28.05.2012, 01:30. Показов 1801. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно, чтобы функция редактировала несколько входящих строк.
C++
1
2
3
char str1[10];
char str2[10];
void function1(char*& str1, char*& str2)
Вышеприведённый код кривой, ибо, как гласит гугл,
на входе имеем указатель не на char, поэтому создаётся временная переменная типа char*, присваивается ей значение этого указателя, и передаётся в функцию уже ссылка на неё (адрес этой временной переменной) - именно об этом компилятор и предупреждает. В результате в функции обнуляется именно эта временная переменная, а не тот указатель, который хотел бы обнулить
Как же сделать функцию, которая принимает несколько строк и может свободно их менять? Помогите плз )
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.05.2012, 01:30
Ответы с готовыми решениями:

как удалять несколько символов сразу из строк?
как удалять несколько символов сразу из строк? к примеру: Удалить часть символьной строки, заключенной в скобки (вместе со скобками).

Функция, изменяющая входящие параметры
Можно ли сделать функцию, чтобы она изменяла переменные, которые ей передаются и массив (тоже передается)? Причем массив не обьявлен, как...

Функция, изменяющая число, переданное ей в качестве параметра
Разработайте функцию Invert, которая возвращает число, полученное записью всех цифр некоторого натурального N в обратном порядке. Т.е.,...

6
Эксперт С++
 Аватар для grizlik78
2382 / 1666 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
28.05.2012, 01:47
Смотря что понимается под "менять". Если нужно менять только содержимое str1 и str2, то достаточно этого:
C++
1
void function1(char* str1, char* str2)
Если же нужно динамически выделять/удалять память под эти строки, то статические массивы на вызывающей стороне никак не подходят.
1
3 / 3 / 0
Регистрация: 25.05.2012
Сообщений: 23
28.05.2012, 02:01  [ТС]
Тогда получается, что я глупо ошибся, когда тестировал такой вариант... Писать
C++
1
str1="abcd";
оказалось некорректно, чего-то думал что после перехода на указатели мы просто по указателю на 1ый элемент массива можем вот так присваивать данные, казалось логичным.

А есть ли ещё какие-либо более адекватные варианты присваивания строки, кроме поэлементно и strcpy() ? А то поэлементно не вариант, а при strcpy(str1, "abcd"); мне кажется получается так, что сначала создаётся строка в памяти и потом перезаписывается в другой сектор памяти... Как-то не оптимально, что-ли )
0
Эксперт С++
 Аватар для grizlik78
2382 / 1666 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
28.05.2012, 02:13
Цитата Сообщение от 33parrots Посмотреть сообщение
а при strcpy(str1, "abcd"); мне кажется получается так, что сначала создаётся строка в памяти и потом перезаписывается в другой сектор памяти... Как-то не оптимально, что-ли )
Строка "abcd" не создаётся, а загружается вместе с самой программой из файла. При запуске. Менять эту строку нельзя. Так что strcpy() это правильный путь. Ещё strdup() можно использовать, если строку надо не просто скопировать, но сперва выделить для неё место (ровно по длине строки).
Но раз уж тут C++, то для современного языка более естественными являются строки std::string.

Добавлено через 4 минуты
Ах, забываю всё время, что strdup это из POSIX. Она не является частью библиотеки Си.
1
3 / 3 / 0
Регистрация: 25.05.2012
Сообщений: 23
28.05.2012, 02:18  [ТС]
Grizlik78, а может Вы случайно занимаетесь репетиторством? С радостью взял бы пару часов )
0
Эксперт С++
 Аватар для grizlik78
2382 / 1666 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
28.05.2012, 02:20
Не-е-ет! И так не знаю, как заставить себя пойти поработать.
0
3 / 3 / 0
Регистрация: 25.05.2012
Сообщений: 23
28.05.2012, 02:29  [ТС]
ну, ответ был довольно предсказуем ) Хотя жаль, конечно же. Я был бы толковым учеником, инфа 100%. Да и цену то Вы предлагаете, не я ))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.05.2012, 02:29
Помогаю со студенческими работами здесь

Функция изменяющая регистр буквенных символов строки
Задание: Реализуйте и протестируйте функцию: void ChangeReg(char *s); Изменяющую регистр буквенных символов строки s. Помогите...

Как закомментировать сразу несколько строк
Доброй ночи! Раньше кнопка рамирования была на панели, теперь, после переустановки, пропала оттуда - проблема. Как вернуть все назад? И...

Listbox - удалить сразу несколько строк
Добрый день, коллеги! Запарился на ровном месте - как удалить несколько строк из листбокса, если его SelectionMode =...

Drag and Drop несколько строк сразу
Доброго времени суток, подскажи как реализовать drag drop сразу несколько значений? Пытаюсь сделать так : private void...

WPF Datagrid Несколько строк сразу
Доброе утро! Ребят подскажите вот какой момент. Мне надо чтоб пользователь мог выбрать несколько строк из datagrid. Я поставил...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru