先看例子:
#include<stdio.h>
#define GET_LEN(array, len) len = sizeof(array) / sizeof(array[0])
#include<string.h>
int main(){
char str[] = "abc";
char sonStr[] = "abc";
int length_str,length_strr;
printf("字符串为:abc\n\n");
GET_LEN(str, length_strr);
length_str = strlen(str);
printf("用strlen()所得长度:%d\n", length_str);
printf("用宏定义所得长度:%d\n\n", length_strr);
return 0;
}
bug:
用宏求字符串长度比 strlen() 函数(即正确长度)多 1
solution:
从string.h库函数中查strlen()函数定义得到:
说明sizeof的宏多计算了一个/0的字符,
因为字符数组其实是这样定义的:
C 风格的字符串起源于 C 语言,并在 C++ 中继续得到支持。字符串实际上是使用 null 字符 ‘\0’ 终止的一维字符数组。因此,一个以 null 结尾的字符串,包含了组成字符串的字符。
下面的声明和初始化创建了一个 “Hello” 字符串。由于在数组的末尾存储了空字符,所以字符数组的大小比单词 “Hello” 的字符数多一个。
char str[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
作者:ZeroZone零域
来源:优快云
原文:https://blog.youkuaiyun.com/ksws0292756/article/details/79432329
因此用
#define GET_LEN(array, len) len = sizeof(array) / sizeof(array[0])
所得的字符串包含了’/0’ , 所以结果多 1 。