Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вроде некорректное отображение длины символьных ко 
:(
    Опции темы
Mastodont
Дата 13.11.2009, 08:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



В книге "Язык С++" Подбельского есть код для определения длины внутренних представлений символьных констант.
Код
//P2-04 длины внутренних представлений символьных констант
#include <iostream.h>
#include <windows.h>

int rustext(char str[])
{
 CharToOem(str,str);
 cout << str;
}

void main()
{
 rustext("\n Длины символьных (литерных) констант (в байтах): ");
 cout << "\nsizeof\'z'\ = " << sizeof 'z';
 cout << "\nsizeof\'\\n\' = " << sizeof '\n';
 cout << "\nsizeof\'\\n\\t'\ = " << sizeof '\n\t';
 cout << "\nsizeof\'\\x07\\x07\' = " << sizeof '\x07\x07';
 cout << "\nsizeof\'\\x4F\' = " << sizeof '\x4F';
 cout << "\nsizeof\'\\111\' = " << sizeof '\111';
 rustext("\nДесятичное значение кода символа ");
 cout << "\'\\x0004F\' = " << (int)'\x0004F';
 rustext("\nДесятичное значение кода символа ");
 cout << "\'\\x4F\' = " << (int)'\x4F';
 rustext("\nДесятичное значение кода пробела = ");
 cout << (int)' ' << "\n";

 system("pause");
}

У меня получается вывод
Цитата

 Длины символьных (литерных) констант (в байтах):
sizeof'z' = 1
sizeof'\n' = 1
sizeof'\n\t' = 4
sizeof'\x07\x07' = 4
sizeof'\x4F' = 1
sizeof'\111' = 1
Десятичное значение кода символа '\x0004F' = 79
Десятичное значение кода символа '\x4F' = 79
Десятичное значение кода пробела = 32
Для продолжения нажмите любую клавишу . . .

А у Подбельского
Цитата

sizeof'\n\t' = 2
sizeof'\x07\x07' = 2

Вроде код правильно написал. Есть ли у меня ошибка?
PM MAIL   Вверх
Platov
Дата 13.11.2009, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Всё правильно оно посчитало!

'\\n\\t' - это и есть 4 символа, а вот '\n\t' это уже 2
PM MAIL   Вверх
Mastodont
Дата 16.11.2009, 08:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

Всё правильно оно посчитало!

'\\n\\t' - это и есть 4 символа, а вот '\n\t' это уже 2

Выходит, у Подбельского опечатка?
PM MAIL   Вверх
Platov
Дата 16.11.2009, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Пробовал такой код:
Код

Button1->Caption=String(sizeof("/r/n")-1);


получается 2 что соответствует действительности. Возможно опечатка в том что кавычки одинарные.
PM MAIL   Вверх
Mastodont
Дата 16.11.2009, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

Возможно опечатка в том что кавычки одинарные

А должны быть двойные?
PM MAIL   Вверх
SenkraD
Дата 16.11.2009, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Mastodont,  sizeof('\n\t') == 4
Код
2.13.2/1A character literal is one or more characters enclosed in single quotes, as in ’x’, optionally preceded by the letter L, as in L’x’. A character literal that does not begin with L is an ordinary character literal, also referred to as a narrow-character literal. An ordinary character literal that contains a single c-char has type char, with value equal to the numerical value of the encoding of the c-char in the execution character set.
An ordinary character literal that contains more than one c-char is a multicharacter literal. A multicharacter literal has type int and implementation-defined value.



--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
Platov
Дата 16.11.2009, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



SenkraD, /r/n это 2 байта! Это обычные однобайтовые символы. Это можно увидеть в обычном текстовом файле в hex-ах.

Это сообщение отредактировал(а) Platov - 16.11.2009, 17:24
PM MAIL   Вверх
SenkraD
Дата 16.11.2009, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Platov,  я сылку с стандарта для кого дал? Вот выделил жирным
Код
2.13.2/1A character literal is one or more characters enclosed in single quotes, as in ’x’, optionally preceded by the letter L, as in L’x’. A character literal that does not begin with L is an ordinary character literal, also referred to as a narrow-character literal. An ordinary character literal that contains a single c-char has type char, with value equal to the numerical value of the encoding of the c-char in the execution character set.
An ordinary character literal that contains more than one c-char is a multicharacter literal. A multicharacter literal has type int and implementation-defined value.



--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
Platov
Дата 16.11.2009, 20:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Мы с SenkraD посоветовались и пришли к выводу что всётаки в книге очепятка в кавычках - нужны двойные.
PM MAIL   Вверх
SenkraD
Дата 16.11.2009, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Я ещё раз перепроверил и прищёл к выводу, что книга писалась либо
на компилере, который поддерживал старый стандарт (я его не знаю),
либо программы тестировались на машине, где sizeof(int) == 2


--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


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

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


 




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


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

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