Почему SIZE_OF_STR возвращает 2 разных ответа для одинаковых значений? - PullRequest
0 голосов
/ 14 января 2020

Почему SIZE_OF_STR возвращает 7 и 5 значений для строки "привет"?

#include <stdio.h>
#define SIZE_OF_STR(s) sizeof(s)/sizeof(char)-1
int main()
{
    char *x = "hello";
    printf("%d\n",SIZE_OF_STR(x));
    printf("%d",SIZE_OF_STR("hello"));
    return 0;
}

Вывод:

7
5

1 Ответ

5 голосов
/ 14 января 2020

Первый sizeof фактически выполняет sizeof указателя на char, который равен 8.

Второй выполняет sizeof константной строки, которая выдает 6 для «hello».

Ваше выражение макроса на самом деле разрешает деление до вычитания, поэтому в результате получается 8-1 = 7 и 6-1 = 5.

...