C语言中字符串的strlen()和sizeof()的区别

  • Post category:C

C语言中字符串是以字符数组的形式存储,字符串的长度就是这个字符数组中字符的个数。在 C 语言中,计算字符串长度的函数有两个:strlen() 和 sizeof()。这两个函数虽然都能计算字符串长度,但它们的实现方式不同,有着很大的区别。

strlen()函数

strlen()函数的功能是计算字符串的长度,它只计算字符串中字符的个数,不包括字符串末尾的空字符 ‘\0’。该函数的声明如下:

size_t strlen(const char *s);

其中,参数 s 是一个指向以 null 结尾的字符串的指针,返回值是字符串中字符的个数。

以下是一个例子,计算字符串 “hello” 的长度:

#include <stdio.h>
#include <string.h>

int main() {
    char str[] = "hello";
    int len = strlen(str);
    printf("长度为%d\n", len);   // 输出:长度为5
    return 0;
}

sizeof()运算符

sizeof()运算符是 C 语言的一个关键字,它可以计算一个变量或数据类型所占据的字节数,包括末尾的空字符 ‘\0’。该运算符的声明如下:

sizeof(type);

其中,type 是一个数据类型或变量的名称,返回值是该类型或变量所占据的字节数。

以下是一个例子,计算数组字符串 “hello” 所占用的字节数:

#include <stdio.h>
#include <string.h>

int main() {
    char str[] = "hello";
    int len = sizeof(str);
    printf("长度为%d\n", len);   // 输出:长度为6
    return 0;
}

在此例中,strlen() 函数计算出字符串的长度为 5,而 sizeof() 运算符计算出字符串占据的字节数为 6。原因是每个字符串在结尾会自动加上一个 null 字符 (‘\0’),sizeof() 函数会计入 ‘\0’ 字符。

综上所述,二者的区别是:strlen() 只计算字符串中字符的个数,不包括字符串结尾的 null 字符 (‘\0’),而 sizeof() 函数会计算字符串后面的 null 字符 (‘\0’),同时也会计算出整个字符串占据的字节数。

总之,选择使用哪个函数,应根据使用场景和需求来决定,要根据具体情况而定。