Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
Ksan
26 / 26 / 0
Регистрация: 02.11.2010
Сообщений: 370
#1

return + char* - C++

28.06.2012, 14:05. Просмотров 682. Ответов 12
Метки нет (Все метки)

Как я понимаю, он вернет всякую чушь, потому что локальная переменная m уничтожается по завершению функции. Тогда нужно выделять память с помощью new, а потом в коде освобождать ее, так?


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
char * func(char *a, char *b)
{
  char m[strlen(a) + strlen(b) + 1];
  int i;
  for(i = 0; i<strlen(a); ++i) m[i] = a[i];
  for(int j=0; j<strlen(b); ++j)
  {
    m[i++] = b[j];
  }
  m[i] = '\0';
  return m;
}
 
 
int main()
{
  char *a = "qwe", *b = "rty", *c = func(a, b);
  return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.06.2012, 14:05     return + char*
Посмотрите здесь:

return *char - C++
если функция дожна возвращать строку... как это сделать? я написала так: char* GetString(char *filename) { FILE *f1; char...

Возврат char* через return - C++
Вот написал маленький пример, того с чем не могу разобраться в большой программе: char *filename; FILE *fd; ...

Return char* непонятная ошибка - C++
Добрый день. Начал разбираться в коде и внезапно появилась проблема... Собственно код: main.cpp int main(int argc, char**...

Visual c++ возврат указателя, return *char - C++
есть класс journal, Я передаю в char *name значение &quot;gfg&quot;, а возвращает от мне заименнованное значение name, только первый символ &quot;f&quot;. ...

Различное поведение функции которая копирует строки с char* t и char t[] - C++
столкнулся с ситуацией которую не могу объяснить пишем функцию которая копирует одну строку в другую: void strstr(char* t,...

array char* to char* (значения массива указателей в один указатель) - C++
Как сложить(или вывести в формате char*) все значения массива указателей(char *) воедино, то есть сложить строки и назначить результату...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
28.06.2012, 14:20     return + char* #2
.Так.
Ksan
26 / 26 / 0
Регистрация: 02.11.2010
Сообщений: 370
28.06.2012, 14:21  [ТС]     return + char* #3
lazybiz, как тогда реализован стринг?
он же возвращает const char * (c_str()), который нигде освобождать не надо
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
28.06.2012, 14:55     return + char* #4
Я думаю этот указатель храниться внутри класса, и освобождается в деструкторе.

Добавлено через 16 минут
Так и есть.
The returned array points to an internal location with the required storage space for this sequence of characters plus its terminating null-character, but the values in this array should not be modified in the program and are only guaranteed to remain unchanged until the next call to a non-constant member function of the string object.
gooseim
Эксперт С++
508 / 412 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
28.06.2012, 19:25     return + char* #5
Ksan, каким компилятором пользовались, когда писали этот код, если не секрет?
Ksan
26 / 26 / 0
Регистрация: 02.11.2010
Сообщений: 370
28.06.2012, 19:40  [ТС]     return + char* #6
gooseim, Написал в поле создания темы. Я не компилил это. Ведь важен был сам ответ, а не конкретная программа.

Но вообще пользуюсь Dev-cpp
gooseim
Эксперт С++
508 / 412 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
28.06.2012, 19:47     return + char* #7
Ksan, тогда понятно. Если задать постоянный буфер (например, если вы будете точно знать, что все поместится в FFFF-байт), то можно так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
char * func(char *a, char *b)
{
  static char m[0xFFFF];
  int i;
  for(i = 0; i<strlen(a); ++i) m[i] = a[i];
  for(int j=0; j<strlen(b); ++j)
  {
    m[i++] = b[j];
  }
  m[i] = '\0';
  return m;
}
 
 
int main()
{
  char *a = "qwe", *b = "rty", *c = func(a, b);
  return 0;
}
В этом случае переменная уничтожаться не будет после выхода из функции и явно ее удалять не нужно.
Ksan
26 / 26 / 0
Регистрация: 02.11.2010
Сообщений: 370
28.06.2012, 19:50  [ТС]     return + char* #8
gooseim,

1) она будет существовать всю программу, даже если уже не нужна
2) есть мне нужно 2 раза вызвать функцию, то первый результат затрется
gooseim
Эксперт С++
508 / 412 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
28.06.2012, 19:53     return + char* #9
Ksan,
1 - да, но FFFF байт для системы это ничего
2 - да, но можно полученное значение сразу копировать в нужную переменную и там его сохранять
Ksan
26 / 26 / 0
Регистрация: 02.11.2010
Сообщений: 370
28.06.2012, 19:57  [ТС]     return + char* #10
gooseim, а почему не 0xFF?
gooseim
Эксперт С++
508 / 412 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
28.06.2012, 19:59     return + char* #11
Ksan, чтобы больше поместилось. FF всего лишь 255 байт.
daslex
1271 / 516 / 106
Регистрация: 02.08.2011
Сообщений: 2,662
28.06.2012, 21:10     return + char* #12
C++
1
char m[strlen(a) + strlen(b) + 1];
Не совсем по теме, но
Чтобы даже просто так сделать вроде как уже нужно выделять память с помощью new

А в Dev C++ это не так?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.06.2012, 22:03     return + char*
Еще ссылки по теме:

функция возвращает массив слов, содержащихся в текстовом сообщении char* Words(char *s) - C++
Стоит такая задача: функция должна возвратить массив слов, содержащихся в текстовом сообщении char* Words(char *s) Как это можно...

Передача в функцию char*([Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings]) - C++
Почему компилятор на это матерится? ObjA.Show(&quot;A&quot;); deprecated conversion from string constant to 'char*' #include &lt;iostream&gt; ...

Поворот массива на 90 градусов (cannot convert form char to char*) - C++
Пытаюсь повернуть массив на 90 градусов. Понимаю что проблема в преобразовании данных, но не знаю как исправить( Может кто подсказать...

[Ошибка] invalid conversion from 'const char*' to 'char*' [-fpermissive] - C++
Решал задачи сам по себе, наткнулся на очень интересную. Вот сама задача: Вы оператор пуска ракет на ядерном подводном ...


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

Или воспользуйтесь поиском по форуму:
gooseim
Эксперт С++
508 / 412 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
28.06.2012, 22:03     return + char* #13
daslex, в с++ так нельзя, в с можно.
Yandex
Объявления
28.06.2012, 22:03     return + char*
Ответ Создать тему
Опции темы

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