sizeof和strlen遇上指针

先看一个例子:

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

int main()
{
    char buf[] = {1, 2, 0, 2, 3, 4, 5, 6, 7};
    char *p = buf;
    char *temp = "12345";
    char *temp1 = "12345\r\n";
    printf("temp sizeof:%d\r\ntemp1 sizeof:%d\r\n", sizeof(temp), sizeof(temp1));
    printf("temp strlen:%d\r\ntemp1 strlen:%d\r\n", strlen(temp), strlen(temp1));
    printf("p strlen:%d\r\np sizeof:%d\r\n", strlen(p), sizeof(p));
    return 0;
}

输出的结果如下:

temp sizeof:8
temp1 sizeof:8
temp strlen:5
temp1 strlen:7
p strlen:2
p sizeof:8

分析:

  • strlen 是一个函数,它用来计算指定字符串 str 的长度,但不包括结束字符(即 null 字符)

  • 关键字 sizeof 是一个单目运算符,而不是一个函数。与函数 strlen 不同,它的参数可以是数组、指针、类型、对象、函数等

  • 指针p的使用strlen函数的话遇到'\0'就会结束这个函数,意思以为指针p中只有两位数,指针p使用sizeof的情况是64位的话是8,如果是32位的话是4;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容