Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос на собеседовании 
:(
    Опции темы
Annihilator
Дата 24.9.2008, 19:54 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


bytegrinder
**


Профиль
Группа: Участник
Сообщений: 493
Регистрация: 21.11.2006
Где: Омск

Репутация: 1
Всего: 3



Цитата(Maka6er @  24.9.2008,  22:57 Найти цитируемый пост)
char *start = str;

а где память под start выделяешь??? Без буфера - никак
Цитата(Maka6er @  24.9.2008,  22:57 Найти цитируемый пост)

Код

for(--str;start < str; --str, start++)
 {
        *str = *str^*start;
        *start = *str^*start;
        *str = *str^*start;    
}


а про strrev(char* s) все дружно забыли. Но опять же без буфера никуда

Это сообщение отредактировал(а) Annihilator - 24.9.2008, 19:55


--------------------
Если вы не можете сделать хоpошyю пpогpаммy, сделайте, чтобы она по кpайней меpе выглядела хоpошо
PM ICQ   Вверх
mes
Дата 24.9.2008, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250




Цитата(Annihilator @  24.9.2008,  19:54 Найти цитируемый пост)
а где память под start выделяешь??? Без буфера - никак

посмотрите внимательнее код - память для start не нужна - он используется как указатель на основную строку,
равноправный указателю str, под который тоже память нигде не выделялась )

а технология используется следующая :
Код


int x=5;
int y=7;

x ^=y;
y ^=x;
x ^=y;

cout <<"x="<<x<<endl; // 7
cout <<"y="<<y<<endl; // 5


как видете ни одного стороннего байта не используются. Такое возможно благодаря некоторому свойству оператора XOR.



--------------------
PM MAIL WWW   Вверх
vinter
Дата 24.9.2008, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



ну это все равно не рабочий вариант, считай у нас дано const char *


--------------------
Мой блог
PM MAIL WWW   Вверх
mes
Дата 24.9.2008, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(vinter @  24.9.2008,  21:15 Найти цитируемый пост)
ну это все равно не рабочий вариант, считай у нас дано const char * 

ну  const char* вобще повернуть нельзя , хоть с буфером хоть без. Можно только получить "повернутую" копию. 
Так что, ИMXO, в задании просто опечатка.




--------------------
PM MAIL WWW   Вверх
Maka6er
Дата 25.9.2008, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 27.2.2007
Где: Киев

Репутация: нет
Всего: 3



Цитата(Annihilator @  24.9.2008,  19:54 Найти цитируемый пост)
а где память под start выделяешь???

А разве обязательно под указатель выделять память? Указатель должен указывать на область в памяти. Я устанавливаю один указатель на начало строки, один - на конец.
Цитата(vinter @  24.9.2008,  21:15 Найти цитируемый пост)
ну это все равно не рабочий вариант, считай у нас дано const char * 

const char * - это указатель на строковую константу (строковый литерал), а константу изменить нельзя.

Это сообщение отредактировал(а) Maka6er - 25.9.2008, 12:24
PM MAIL   Вверх
W4FhLF
Дата 25.9.2008, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 20
Всего: 121



Цитата(Maka6er @  25.9.2008,  12:23 Найти цитируемый пост)
const char * - это указатель на строковую константу (строковый литерал), а константу изменить нельзя.


А vinter что имел ввиду? 


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
Maka6er
Дата 25.9.2008, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 27.2.2007
Где: Киев

Репутация: нет
Всего: 3



Цитата(W4FhLF @  25.9.2008,  13:02 Найти цитируемый пост)
А vinter что имел ввиду?  

Сори, туплю. Я имел ввиду из задания: char* str = "12345";
PM MAIL   Вверх
serg76
Дата 26.9.2008, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 19.3.2008

Репутация: нет
Всего: нет



Код

  char *str = "12345";
  *(str)^=*(str+4);
  *(str+4)^=*(str);
  *(str)^=*(str+4);
  *(str+1)^=*(str+3);
  *(str+3)^=*(str+1);
  *(str+1)^=*(str+3);

даже не выделяя переменную для цикла
зы полный бред
имхо тож самое что бутерброды делать топором
PM   Вверх
J0ker
Дата 26.9.2008, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 4
Всего: 14



Цитата(serg76 @ 26.9.2008,  13:24)
Код

  char *str = "12345";
  *(str)^=*(str+4);
  *(str+4)^=*(str);
  *(str)^=*(str+4);
  *(str+1)^=*(str+3);
  *(str+3)^=*(str+1);
  *(str+1)^=*(str+3);

даже не выделяя переменную для цикла
зы полный бред
имхо тож самое что бутерброды делать топором

ты бы почитал сначала обсуждение
этот код в большинстве случаев приведет к Segmentation fault и Access violation


--------------------
user posted image
PM MAIL   Вверх
serg76
Дата 27.9.2008, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 19.3.2008

Репутация: нет
Всего: нет



Цитата

ты бы почитал сначала обсуждение
этот код в большинстве случаев приведет к Segmentation fault и Access violation


а где приведет то, конкретнее?

зы насчет const наскока помню в С через указатели можно все менять
для примера к коду выше
заменить
Код
char *str= "12345";

на
Код

  const char str1[] = "12345";
  char *str=(char *)str1;

PM   Вверх
mes
Дата 27.9.2008, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(serg76 @  27.9.2008,  10:49 Найти цитируемый пост)
зы насчет const наскока помню в С через указатели можно все менять

Цитата(serg76 @  27.9.2008,  10:49 Найти цитируемый пост)
  char *str=(char *)str1;

При таком подходе Вы надеетесь, что даные размещенные по указателю str1, размещаются в пользовательской области с правом записи.
Однако строчка :
Цитата(serg76 @  27.9.2008,  10:49 Найти цитируемый пост)
 const char str1[] = "12345";

говорит компилятору о возможности размещении данных в памяти только для чтения.

Как видите результат выполнения операций в таком случае потенциально опасен и зависит от компилятора и его настроек.



--------------------
PM MAIL WWW   Вверх
J0ker
Дата 27.9.2008, 19:04 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 4
Всего: 14



Цитата(serg76 @  27.9.2008,  10:49 Найти цитируемый пост)
а где приведет то, конкретнее?

здесь:
Код

*(str)^=*(str+4);

строковые литералы явяются константами и могут размещаться в защищенном от записи сегменте
возможность присвоения их не константам - тяжелое наследие прошлого

Добавлено @ 19:07
объявление типа
Код

char str[] = "123456";

размещает массив на стеке - что позволяет менять его содержимое

Добавлено @ 19:17
Цитата(mes @  27.9.2008,  11:54 Найти цитируемый пост)
Однако строчка :
Код

 const char str1[] = "12345";

говорит компилятору о возможности размещении данных в памяти только для чтения.

это говорит компилятору, что str константный массив. Но размещение его будет на стеке (потому, что это массив - он просто с инициализатором)
выражение:
Код

const char *str = "12345";

говорит о том, что str указатель на константную строку, инициализируемый АДРЕСОМ строкового литерала, который возможно находится в защищенном от записи сегменте
как грится "почувствуйте разницу"

Это сообщение отредактировал(а) J0ker - 27.9.2008, 19:17


--------------------
user posted image
PM MAIL   Вверх
W4FhLF
Дата 28.9.2008, 06:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 20
Всего: 121



Цитата(J0ker @  27.9.2008,  19:04 Найти цитируемый пост)
это говорит компилятору, что str константный массив. Но размещение его будет на стеке


Ну это смотря где его объявить. 


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
J0ker
Дата 28.9.2008, 06:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 4
Всего: 14



Цитата(W4FhLF @ 28.9.2008,  06:25)
Цитата(J0ker @  27.9.2008,  19:04 Найти цитируемый пост)
это говорит компилятору, что str константный массив. Но размещение его будет на стеке


Ну это смотря где его объявить.

да
в функции
иначе в секции .rdata (защищенные от записи и исполнения инициализированные данные) и .data (защищенные от исполнения инициализированные данные) соответственно
хотя рояля это и не играет  smile 

Это сообщение отредактировал(а) J0ker - 28.9.2008, 06:56


--------------------
user posted image
PM MAIL   Вверх
Страницы: (3) Все 1 2 [3] 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0725 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.