Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: sizeof("&#") = 3
Форум на CrossPlatform.RU > Разработка > С\С++
Litkevich Yuriy
sizeof("&#") = 3

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

Не забывайте если что.
:rolleyes:
Алексей1153
ну это ведь статический массив, эквивалент

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
Цитата(Алексей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
а в чём тут заключается подсказка - я так и не понял )
Litkevich Yuriy
Цитата(Алексей1153 @ 9.12.2012, 3:06) *
а в чём тут заключается подсказка - я так и не понял )
в том, что позиция передвинулась на длину последовательности &#, а не просто на какую-то абстрактную 2.
Только сейчас пришло в голову, вроде strlen выдаёт длину строки без замыкающего нуля
Алексей1153
ну так вот, чем хуже будет так ?

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


если при этом не хочется замусоривать локальное пространство, можно обернуть в фиговые скобки )
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.