С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
33parrots
3 / 3 / 0
Регистрация: 25.05.2012
Сообщений: 23
#1

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

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

Нужно, чтобы функция редактировала несколько входящих строк.
C++
1
2
3
char str1[10];
char str2[10];
void function1(char*& str1, char*& str2)
Вышеприведённый код кривой, ибо, как гласит гугл,
на входе имеем указатель не на char, поэтому создаётся временная переменная типа char*, присваивается ей значение этого указателя, и передаётся в функцию уже ссылка на неё (адрес этой временной переменной) - именно об этом компилятор и предупреждает. В результате в функции обнуляется именно эта временная переменная, а не тот указатель, который хотел бы обнулить
Как же сделать функцию, которая принимает несколько строк и может свободно их менять? Помогите плз )
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.05.2012, 01:30
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Функция изменяющая сразу несколько строк (C++):

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

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

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

Функция getline считывает несколько строк из файла, игнорируя символ новой строки - C++
Всем доброго дня! В С++ я новичок, сам себе придумываю задачки, просто для тренировки. Столкнулся с непонятным для меня поведением...

Записать в файл несколько строк, а затем записать несколько строк из этого файла в другой - C++
Заранее создать текстовый файл 1.txt и записать в него несколько строк текста. Программа должна получить из него второй файл 2.txt, в...

Как быстро подключить сразу несколько include - C++
Нужно сделать так, чтобы # include "название .h" включала в себя #include <iostream> #include <string> #include <vector> #include...

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

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

Добавлено через 4 минуты
Ах, забываю всё время, что strdup это из POSIX. Она не является частью библиотеки Си.
1
33parrots
3 / 3 / 0
Регистрация: 25.05.2012
Сообщений: 23
28.05.2012, 02:18  [ТС] #5
Grizlik78, а может Вы случайно занимаетесь репетиторством? С радостью взял бы пару часов )
0
grizlik78
Эксперт С++
1972 / 1465 / 122
Регистрация: 29.05.2011
Сообщений: 3,033
28.05.2012, 02:20 #6
Не-е-ет! И так не знаю, как заставить себя пойти поработать.
0
33parrots
3 / 3 / 0
Регистрация: 25.05.2012
Сообщений: 23
28.05.2012, 02:29  [ТС] #7
ну, ответ был довольно предсказуем ) Хотя жаль, конечно же. Я был бы толковым учеником, инфа 100%. Да и цену то Вы предлагаете, не я ))
0
28.05.2012, 02:29
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.05.2012, 02:29
Привет! Вот еще темы с ответами:

Добавить сразу несколько элементов в начало вектора - C++
как добавить НЕСКОЛЬКО РАЗОМ элементов в начало? без цикла(т.к. 200 раз это долго)

записать несколько элементов в вектор сразу, как в массиве - C++
Добрый день, форум. Возможно ли в векторе записать несколько элементов одним разом, как в массиве? Например: массив: int massive =...

Функция PlaySound воспроизводит звук и возвращает управление СРАЗУ ЖЕ (но это неправильно), почему? - C++
Друзья! Вот код: #include <windows.h> #include <stdio.h> int main (){ PlaySound ("fail.wav", 0, SND_FILENAME || SND_SYNC); ...

функция возвращает int, возвращаемые значения определены в макросах, как сразу выводить определённые макросы? - C++
Друзья! Есть какой-нибудь способ без if-else? Ну то есть вот код: #define odin 1 ////////////всякий код int f () {retutn...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.