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

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

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

return + char* - C++

28.06.2012, 14:05. Просмотров 690. Ответов 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;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.06.2012, 14:05
Здравствуйте! Я подобрал для вас темы с ответами на вопрос return + char* (C++):

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

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

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

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

Error C2440: return: невозможно преобразовать "const char *" в "const char (&)[6]" - C++
Вроде все правильно а все равно не работает. Подскажите в чем ошибка #include &lt;iostream&gt; template&lt;typename T&gt; inline const T...

В чем разница между return и return false/true - C++
Привет всем. Вот подскажите плиз) return; return false; return true; расскажите пожалуйста об етих операторах.. чем они...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
castaway
Эксперт С++
4884 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
28.06.2012, 14:20 #2
.Так.
0
Ksan
27 / 27 / 0
Регистрация: 02.11.2010
Сообщений: 370
28.06.2012, 14:21  [ТС] #3
lazybiz, как тогда реализован стринг?
он же возвращает const char * (c_str()), который нигде освобождать не надо
0
castaway
Эксперт С++
4884 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
28.06.2012, 14:55 #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.
1
gooseim
Эксперт С++
508 / 412 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
28.06.2012, 19:25 #5
Ksan, каким компилятором пользовались, когда писали этот код, если не секрет?
0
Ksan
27 / 27 / 0
Регистрация: 02.11.2010
Сообщений: 370
28.06.2012, 19:40  [ТС] #6
gooseim, Написал в поле создания темы. Я не компилил это. Ведь важен был сам ответ, а не конкретная программа.

Но вообще пользуюсь Dev-cpp
0
gooseim
Эксперт С++
508 / 412 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
28.06.2012, 19:47 #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;
}
В этом случае переменная уничтожаться не будет после выхода из функции и явно ее удалять не нужно.
0
Ksan
27 / 27 / 0
Регистрация: 02.11.2010
Сообщений: 370
28.06.2012, 19:50  [ТС] #8
gooseim,

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

А в Dev C++ это не так?
0
gooseim
Эксперт С++
508 / 412 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
28.06.2012, 22:03 #13
daslex, в с++ так нельзя, в с можно.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.06.2012, 22:03
Привет! Вот еще темы с ответами:

Как сделать так, что если файл существует return true, если нет - return false - C++
Здравствуйте, я новичок в программировании. Мой вопрос очень прост: как сделать так, что если файл существует return true если нет return...

(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const& - C++
astxx::manager::connection::connection(std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;, unsigned short); ...

Error C2664: sprintf: невозможно преобразовать параметр 1 из 'const char *' в 'char *' - C++
error C2664: sprintf: невозможно преобразовать параметр 1 из 'const char *' в 'char *' void crpost(const statep &amp;struc1) { ...

Ошибка в cannot convert char * to char вроде поправил теперь выводит ересь( - C++
Всем доброго дня! У меня такая проблемка.... написал программу, но сначала она ругалась на Cannot convert char* to char теперь вроде...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
28.06.2012, 22:03
Ответ Создать тему
Опции темы

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