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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Получаю вместо эллемента массива новый массив 
V
    Опции темы
ZC1989
  Дата 2.6.2008, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 468
Регистрация: 17.7.2006
Где: Нижний Новгород; Россия

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



тут заметил странную штуку...

Код

char *name = new char[512];

// zip заполняет структуру...

MessageBox(0, (&name[strlen(name)-3]), "", 0);


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


--------------------
озарение настанет позже, когда поймём больше... (Сo. Stigmata)
PM MAIL ICQ   Вверх
Mayk
Дата 2.6.2008, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


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

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



Особенности си строк (описаны в любой мало мальски серьезной книжке по программингу)
создай новую строку и её используй.

Самый "простой" способ (относительно кол-ва строк  smile )

Цитата

    MessageBox(0, std::string(name+strlen(name)-3, name+strlen(name)-2 ).c_str(), "", 0);

этот страшный код делает следующие веши:
создаёт c++ строку из одного символа, преобразовывает её в си строку, вызывает messagebox, подчищает под собой.

более читаемо делать так
Цитата

    char excerpt[]={name[strlen(name)-3],0}; 
    MessageBox(0, excerpt, "", 0);


Это сообщение отредактировал(а) Mayk - 2.6.2008, 10:23


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
ksili
Дата 2.6.2008, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата

int MessageBox(char * Text, char * Caption, int Flags)


MessageBox не символы выводит, а строки.


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
Fazil6
Дата 2.6.2008, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(ZC1989 @  2.6.2008,  10:07 Найти цитируемый пост)
почему то выводит он вместо третьего с конца символа последние три....что за такое? 

именно это ты и приказал ему вывести. Все правильно - последние 3 символа
PM MAIL   Вверх
ZC1989
Дата 2.6.2008, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 468
Регистрация: 17.7.2006
Где: Нижний Новгород; Россия

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



ну для начала, объясню, я знаю зачем нужен месседж бокс, он тут для наглядности! прекрасно знаю что символы он не выводит...   
Fazil6, я же вроде говорю ему вывести эллемент массива strlen(name)-3...  то есть это конкретное число...

Добавлено через 39 секунд
или такай ерунда потому что я обращаюсь к памяти по ссылке - &  ?


--------------------
озарение настанет позже, когда поймём больше... (Сo. Stigmata)
PM MAIL ICQ   Вверх
vinter
Дата 2.6.2008, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


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

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



Цитата

&name[strlen(name)-3])

так ты получаешь адрес строки, которая начинается на 3 с конца символе исходной строки


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


Опытный
**


Профиль
Группа: Участник
Сообщений: 468
Регистрация: 17.7.2006
Где: Нижний Новгород; Россия

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



тоесть я смещаю указатель тем самым у мя та же строка но указываю я на третий с конца эллмент...так что ли?


--------------------
озарение настанет позже, когда поймём больше... (Сo. Stigmata)
PM MAIL ICQ   Вверх
anatox91
Дата 2.6.2008, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


программист-самоучка
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 12.1.2008
Где: ++Украина.Крым++

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



Код

MessageBox(0, (name[strlen(name)-3]), "", 0);

иначе ты передаешь ссылку на указатель

Это сообщение отредактировал(а) anatox91 - 2.6.2008, 12:35


--------------------

The code is the design ©

Sony VAIO VGN-FW480J

user posted image
PM MAIL ICQ   Вверх
bsa
Дата 2.6.2008, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



ZC1989, в Си (и с++) есть особая реакция на указатель на char. В частности, все процедуры вывода воспринимают его, как указатель на массив символов.
Если тебе нужно вывести код третьего с конца символа, то для этого нужно использовать snprintf (Си) или std::stringstream (Си++) для преобразования числа в строку:
Код
#include <string.h>
#include <stdio.h>
...
char num[5]; //char имеет значения -128...+127, итого 4 символа + завершающий 0.
snprintf(num, sizeof(num), "%d", (int)(name[strlen(name) - 3]));
MessageBox(0, num, "", 0);
...
Кстати, &name[strlen(name) - 3] - это тоже самое (если нет каких-то извращений в С++), что и name + (strlen(name) - 3).

Это сообщение отредактировал(а) bsa - 3.6.2008, 13:48
PM   Вверх
ZC1989
Дата 3.6.2008, 08:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 468
Регистрация: 17.7.2006
Где: Нижний Новгород; Россия

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



bsa, А! понял) привык относиться к строкам как к обычным массивам, и скобки квадратные тож привычка, а всё же, какие могут быть извращения?  smile 


--------------------
озарение настанет позже, когда поймём больше... (Сo. Stigmata)
PM MAIL ICQ   Вверх
ksili
Дата 3.6.2008, 09:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(ZC1989 @  3.6.2008,  12:25 Найти цитируемый пост)
какие могут быть извращения?

Да никаких. Всё так, как написал bsa, 


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
ZC1989
  Дата 4.6.2008, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 468
Регистрация: 17.7.2006
Где: Нижний Новгород; Россия

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



пасиба всем)))


--------------------
озарение настанет позже, когда поймём больше... (Сo. Stigmata)
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0703 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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