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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как соединить char x[j] + char y[i] ??? -как эффективно-- 
V
    Опции темы
JAnty
  Дата 29.3.2007, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



10 раз откомпилил, 10 повезло. Вот она удача -> smile 


--------------------
Русский справочник по WinAPI

Возможно всё, что возможно вообразить! Это и значит быть гением как я!
PM MAIL   Вверх
Partizan
Дата 29.3.2007, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

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



тебе повезло что программа не вылетела с access violation при попытке записи за границы массива....


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Kuvaldis
Дата 29.3.2007, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


механик-вредитель
***


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

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



JAnty
Запусти прогу не из IDE, а из проводника. Думаю, что теперь увидишь разницу (скорее всего, ты еще и debug версию компилишь)


--------------------
Помни - когда ты спишь, враг не дремлет
Спи чаще и дольше, изматывай врага бессоницей
PM MAIL ICQ   Вверх
apook
Дата 29.3.2007, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

char a[2]="hh";

a[2]='\0'; все правильно  smile


Dov я не хулиганю эта обьявление правильное на мой взгляд
Код

char a[2]="\0";

чему равна длина этого массива? Только не надо говорить про плохие компиляторы




Это сообщение отредактировал(а) apook - 29.3.2007, 17:51


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
JackYF
Дата 29.3.2007, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



Цитата(apook @  29.3.2007,  17:45 Найти цитируемый пост)
a[2]='\0'; все правильно  smile


выход за границы массива. ты имеешь доступ к a[0] и a[1]. У тебя размер - 2 элемента, а не 3.



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
JAnty
  Дата 29.3.2007, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



char a[2];
 a[0]='a';
 a[1]='q';
 a[2]='w';
 a[3]='e';
 a[4]='t';
 Forma->Caption=a;

Цитата(Kuvaldis @  29.3.2007,  17:45 Найти цитируемый пост)
Запусти прогу не из IDE, а из проводника. Думаю, что теперь увидишь разницу (скорее всего, ты еще и debug версию компилишь) 


Пожилание учол, откомпилил финальную в ехе и запустил на другом компе, и всё mrOk;  smile 


--------------------
Русский справочник по WinAPI

Возможно всё, что возможно вообразить! Это и значит быть гением как я!
PM MAIL   Вверх
Partizan
Дата 29.3.2007, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

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



ггг ) попробуй текст в 10 Мбайт дозаписать) может тогда наконец вылетит)


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
vinter
Дата 29.3.2007, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


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

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



Цитата(JAnty @  29.3.2007,  18:03 Найти цитируемый пост)
Пожилание учол, откомпилил финальную в ехе и запустил на другом компе, и всё mrOk; 

везение и больше ничего, даже скорее невезение, потомучто когданить из-за этого на такую проблему можешь попасть..
почитай про устройство памяти и про определение переменных и про то как все это хранится, и nujulf поймешь в чем ты неправ

Цитата(apook @  29.3.2007,  17:45 Найти цитируемый пост)
чему равна длина этого массива? Только не надо говорить про плохие компиляторы

так тут как раз два элемента будет \0 и \0. \ - экранирующий символ 
Цитата(apook @  29.3.2007,  17:45 Найти цитируемый пост)
a[2]='\0'; все правильно  

что правильно, то что ты обьявил массив из 2 элементов, а обращаешься к третьему?



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


Опытный
**


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

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



Цитата(vinter @  29.3.2007,  18:14 Найти цитируемый пост)
везение и больше ничего, даже скорее невезение, потомучто когданить из-за этого на такую проблему можешь попасть..


Я же не собираюсь так и понатуре делать, память просто терпит, винда допускает оплошности, но суть бредовая, согласен.
По сути дело оно как, в памяти пишутся символы по порядку и потом \0 . потом читаем до \0, в указателе мы же не указываем длинну, а a[2]='\0' запишет символ \0 после символа a[1] в памяти.
 smile ИМХО


--------------------
Русский справочник по WinAPI

Возможно всё, что возможно вообразить! Это и значит быть гением как я!
PM MAIL   Вверх
vinter
Дата 29.3.2007, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


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

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



Цитата
По сути дело оно как, в памяти пишутся символы по порядку и потом \0 . потом читаем до \0, в указателе мы же не указываем длинну, а a[2]='\0' запишет символ \0 после символа a[1] в памяти.


но так не должно позволять делать!
хм.. у меня подозрение что здесь замешан борланд..

Добавлено через 2 минуты и 16 секунд
 smile респект 2003 студии, она не дала такое скомпилить smile 


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


Опытный
**


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

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



Цитата

но так не должно позволять делать!

char str[ 2 ]="\0";
что здесь опасного просто строка длинной 0, зачем экранирование
экранируется '\n'


Цитата

ты обьявил массив из 2 элементов, а обращаешься к третьему?

но он же там будет но кстати плохо однако он затереться может
(а может и нет smile чет я не уверен)




--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
JAnty
  Дата 29.3.2007, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(vinter @  29.3.2007,  18:28 Найти цитируемый пост)
респект 2003 студии, она не дала такое скомпилить   

Там так называемая "защита от дурака"
Именно так делается изменение массивов и т.д. в стандартных библиотеках.
А теперь это доступно пользователю в ручную. 
Превратим a[2] в a[3];
Код

char a[2];
a[2]=' ';    // стёрли \0 и записали ' '
a[3]='\0';    // тем самым добавили 1 символ; 

С этим надо быть осторожным. А лучше преобразовывать стандартными методами, которые делаются именно таким способом, но которые проверены годами и стандартом С.
ИМХО

Добавлено через 5 минут и 35 секунд
Шалости с ОЗУ. smile 

Это сообщение отредактировал(а) JAnty - 29.3.2007, 18:46


--------------------
Русский справочник по WinAPI

Возможно всё, что возможно вообразить! Это и значит быть гением как я!
PM MAIL   Вверх
vinter
Дата 29.3.2007, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


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

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



Цитата(JAnty @  29.3.2007,  18:45 Найти цитируемый пост)
Шалости с ОЗУ. 

а если сразу после массива идет нужная информация?? например другая строка, к чему тогда такие шалости могут привести?
Цитата(JAnty @  29.3.2007,  18:45 Найти цитируемый пост)
А лучше преобразовывать стандартными методами

это какими это? лучше динамически выделять, и не иметь проблем с памятью..


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


Опытный
**


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

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



Цитата(vinter @  29.3.2007,  18:53 Найти цитируемый пост)
а если сразу после массива идет нужная информация?? например другая строка, к чему тогда такие шалости могут привести?


Тогда разумеется это чревато полным пипецом. smile

Добавлено через 7 минут и 59 секунд
Цитата(vinter @  29.3.2007,  18:53 Найти цитируемый пост)
а если сразу после массива идет нужная информация?? например другая строка, к чему тогда такие шалости могут привести?


А тогда кагже работает указатель на строку, адрес не меняется, но строка растёт? а?


--------------------
Русский справочник по WinAPI

Возможно всё, что возможно вообразить! Это и значит быть гением как я!
PM MAIL   Вверх
apook
Дата 29.3.2007, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

char str[ 50 ]=" World!", *s;

str[ 45 ]='H';
str[ 46 ]='e';
str[ 47 ]='l';
str[ 48 ]='l';
str[ 49 ]='o';

s=&str[ 45 ];
// указатель на строку str
cout << s[ 0 ];
cout << s[ 1 ];
cout << s[ 2 ];
cout << s[ 3 ];
cout << s[ 4 ];


cout << s[ -45 ]; 
cout << s[ -44 ];
cout << s[ -43 ];
cout << s[ -42 ];
cout << s[ -41 ];
cout << s[ -40 ];
cout << s[ -39 ];


Это сообщение отредактировал(а) apook - 29.3.2007, 20:02


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

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

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

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

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


 




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


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

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