Разница между sizeof (str -1) и sizeof (str) -1? - PullRequest
2 голосов
/ 27 марта 2012

Я пару раз сталкивался с sizeof (str -1) в сети, но никогда не использовал его сам. Мне просто любопытно, в чем разница между sizeof (str-1) и sizeof (str) -1, где str - массив символов, скажем char str [] = "Hello";

Ответы [ 2 ]

9 голосов
/ 27 марта 2012

sizeof(str) - размер массива str.В данном случае это 6 (включая нулевой терминатор).Так что sizeof(str)-1 равно 5 (исключая терминатор nul).

str-1 имеет тип char* в C и const char* в C ++ из-за затухания массива в указатель.Так что sizeof(str-1) - это размер указателя на символ.Это не имеет никакого отношения к длине конкретной строки, используемой для определения str.

Кроме того, вычисление str-1 является неопределенным поведением.Удобно sizeof не оценивает его операнд, так что это не проблема здесь.

5 голосов
/ 27 марта 2012

(согласно отладке при компиляции для 64 бит) это большая разница.

int main( void ) 
{
    char str[] = "Hello";

    sizeof( str-1 ); //gives 8
    strSize = sizeof( str ) - 1; //gives 5
}

Первый экземпляр задает размер указателя, потому что аргумент является результатом арифметики указателя, второй - размер строки, меньше единицы.

(размер ваших указателей может отличаться. :-))

...