Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.06.2010, 16:49   #1
gignet
Пользователь
 
Регистрация: 04.06.2010
Сообщений: 19
По умолчанию возаращение строки

PHP код:

int main
()
{
  
charpc;
  
pc getStr();
}
char getStr()
{
  
char str[10] = "hello";
  return 
str;

Примерный набросок. Не выходит вернуть в main() str. Подскажите код.
gignet вне форума Ответить с цитированием
Старый 05.06.2010, 16:59   #2
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Во-первых возвращать нужно не char, а char* - указатель на массив символов. Во-вторых запись char str[10] = "hello"; приводит к копированию строки "hello" в локальную переменную str, а, как известно, при выходе из функции все локальные переменные разрушаются.
Всё бы работало, если бы вы написали например так:
Код:
int main()
{
    const char* pc;
    ps = getStr();
}

const char* getStr()
{
    const char* str = "hello";
    return str;
}
только следует учитывать, что возвращается указатель, сама строка одна и та же и находится в одном и том же месте, в сегменте данных. В Си нет прямой возможности передавать массив по значению
netrino вне форума Ответить с цитированием
Старый 05.06.2010, 17:11   #3
gignet
Пользователь
 
Регистрация: 04.06.2010
Сообщений: 19
По умолчанию

Спасибо. Только не ясно почему нужно объявлять const char* str. Почему нельзя просто char* str = "hello"?
gignet вне форума Ответить с цитированием
Старый 05.06.2010, 17:15   #4
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от gignet Посмотреть сообщение
Спасибо. Только не ясно почему нужно объявлять const char* str. Почему нельзя просто char* str = "hello"?
Потому что строковый литерал имеет тип const char*. Фактически, большинство современных компиляторов кладут строковые литералы в сегмент константных данных, попытка поменять их приведёт к ошибке времени исполнения. И потому, дабы ненароком не попытаться поменять значение строки, лучше писать именно const char* = "hello" ) В этом случае все попытки писать в эту строку будут отловлены во время компиляции
netrino вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определять максимальную длину той части строки s, которая не содержит символы из строки s1. Александе еть я Общие вопросы C/C++ 5 13.04.2010 20:54
Удаление элементов строки s2 из строки s1 Ueshua Общие вопросы C/C++ 4 20.12.2009 13:06
Перенести символа с начала строки в место перед запятой этой же строки. Zhiltsov Microsoft Office Excel 4 05.06.2009 13:10
Строки. Как вывести часть строки? Anfall Общие вопросы Delphi 7 26.02.2009 09:10
считать из файла две строки, вывести на экран символы первой строки, которые отсутствуют во второй gotex Помощь студентам 4 08.05.2008 02:27