crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> sizeof("&#") = 3
Litkevich Yuriy
  опции профиля:
сообщение 8.12.2012, 0:36
Сообщение #1


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


sizeof("&#") = 3

Чуть голову себе не сломал, почему же не 2. А всё просто, там ведь нуль замыкающий!

Не забывайте если что.
:rolleyes:
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 8.12.2012, 23:28
Сообщение #2


фрилансер
******

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


ну это ведь статический массив, эквивалент

char a[]={'&','#',0};

а для них sizeof вертает размер в байтах. И вообще, лучше так не делать с массивами, а то легко можно нарваться на неприятности ))

        int size=0;

        char a1[]={'&','#',0};
        size=sizeof(a1);//==3

        char a2[]="&#";//то же самое
        size=sizeof(a2);//==3

        char* a3="&#";//указатель
        size=sizeof(a3);//==4
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 9.12.2012, 1:02
Сообщение #3


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(Алексей1153 @ 9.12.2012, 1:28) *
char* a3="&#";//указатель
        size=sizeof(a3);//==4
вот про это знаю, но т.к. программирую последнее время изредка, то иногда умудряюсь наступить на граблю.


Цитата(Алексей1153 @ 9.12.2012, 1:28) *
И вообще, лучше так не делать с массивами
я сильно не люблю магических констант, но иногда влом заводить именованные. И чтобы спустя Н-цать месяцев не ломать голову, что это за константа использую как подсказку в ситуациях вроде:
pos = data.indexOf("&#", pos, Qt::CaseInsensitive);
pos += QString("&#").size(); // вот тут-то и был sizeof("&#")
т.е. чтобы быстро вспомнить, что я за константу прибавил к указателю позиции.

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 9.12.2012, 1:06
Сообщение #4


фрилансер
******

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


а в чём тут заключается подсказка - я так и не понял )
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 9.12.2012, 1:16
Сообщение #5


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(Алексей1153 @ 9.12.2012, 3:06) *
а в чём тут заключается подсказка - я так и не понял )
в том, что позиция передвинулась на длину последовательности &#, а не просто на какую-то абстрактную 2.
Только сейчас пришло в голову, вроде strlen выдаёт длину строки без замыкающего нуля
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 9.12.2012, 22:40
Сообщение #6


фрилансер
******

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


ну так вот, чем хуже будет так ?

{
  static const char* _apm_grid="&#";
  pos = data.indexOf(_apm_grid, pos, Qt::CaseInsensitive);
  pos += strlen(_apm_grid);
}


если при этом не хочется замусоривать локальное пространство, можно обернуть в фиговые скобки )
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 16.4.2024, 22:49