为什么SIZE_OF_STR对相同的值返回2个不同的答案?

时间:2020-01-14 19:47:38

标签: c sizeof strlen

为什么SIZE_OF_STR为“ hello”字符串返回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 个答案:

答案 0 :(得分:5)

第一个sizeof实际上是做一个指向char的指针的sizeof,它是8。

第二个方法是执行常量字符串的sizeof,它为“ hello”产生6。

您的宏表达式实际上在减法之前解决了除法问题,因此导致8-1 = 7和6-1 = 5。