sizeof 和 strlen 的区别及举例

sizeof 和 strlen 的区别

1)sizeof 操作符的结果类型是 size_t,它在头文件中 typedef 为 unsigned int类型。该类型保证能容纳实现所建立的最大对象的字节大小。

2)sizeof 是个操作符,strlen 是库函数。

3)sizeof 的参数可以是数据的类型,也可以是变量,而 strlen 只能是以结尾为 ’\0’ 的字符串作参数。

4)编译器在编译时就计算出了 sizeof 的结果,而 strlen 函数必须在运行时才能计算出来。并且 sizeof 计算的是数据类型内存的大小,而 strlen 计算的是字符串实际的长度。

5)数组做sizeof的参数不退化,传递给 strlen 就退化为指针。

6)当适用了于一个结构类型时或变量, sizeof 返回实际的大小, 当适用一静态地空间数组, sizeof 归还全部数组的尺寸。 sizeof 操作符不能返回动态地被分派了的数组或外部的数组的尺寸。

实例

#include <stdio.h>
#include <string.h>
 
void func(char str_arg[100])
{
    printf("\nstr_arg = %s\n", str_arg);
    printf("sizeof(str_arg) = %d\n", sizeof(str_arg));
    printf("strlen(str_arg) = %d\n", strlen(str_arg));
}

int main()
{
    char str[] = "Hello";
    printf("str = %s\n", str);
    printf("sizeof(str) = %d\n", sizeof(str));
    printf("strlen(str) = %d\n", strlen(str));
 
    char * p = str;
    printf("\np = %s\n", p);
    printf("sizeof(p) = %d\n", sizeof(p));//linux 64位系统下,指针的长度是8字节,但是windows 64位系统下,指针的长度是4字节
    printf("strlen(p) = %d\n", strlen(p));
 
    func(str);
    return 0;
}
str = Hello
sizeof(str) = 6
strlen(str) = 5

p = Hello
sizeof(p) = 4
strlen(p) = 5

str_arg = Hello
sizeof(str_arg) = 4
strlen(str_arg) = 5
发布了47 篇原创文章 · 获赞 108 · 访问量 4721

猜你喜欢

转载自blog.csdn.net/qq_44759710/article/details/104380351