• srtlen实现以及与sizeof的比较


    这里仅为个人整理,大部分来自百科

     一、strlen函数

    strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符''为止,然后返回计数器值(长度不包含'')。

    1、用法:

    针对碰到第一个字符串结束''为止的两点说明:

    (1)见下例:

    1 char a[10]={''};
    2 cout<<strlen(a)<<endl;  //结果为0

    从开始到遇到一个''为止。

    (2)见下例:

    1 char a[10];
    2 cout<<strlen(a)<<endl;  //此处结果不定

    从开始到遇到一个''为止。

    2、函数实现

     1 /*递归版*/
     2 size_t strlen(const char *pStr)
     3 {
     4     assert(pStr !=NULL);
     5     if(*pStr !='')
     6     {
     7         return 1+strlen(++pStr);
     8     }
     9     else
    10         return 0;
    11 }
    12 
    13 /*非递归版*/
    14 size_t strlen(const char *pStr)
    15 {
    16     assert(pStr !=NULL);
    17     size_t psize=0;
    18     while(*pStr !='')
    19     {
    20         psize++;
    21         pStr++;
    22     }
    23     rturn psize;
    24 }

    二、sizeof

    sizeof是C/C++中的一个操作符(operator),简单的说其作用就是返回一个对象或者类型所占的内存字节数。sizeof( )返回的是变量声明后所占的内存数,不是实际长度。

    1、这是一个依赖编译系统的值,头文件为stddef.h中,一般定义为:

    1 typedef unsigned int size_t;

    2、语法

    1 sizeof(object);     //sizeof(对象);
    2 sizeof(type_name);  //sizeof(类型);
    3 sizeof object;      //sizeof 对象;和第一行比少一个括号

    三、strlen函数和sizeof的区别

    (1)sizeof不是函数,仅仅是一个取字节运算符,strlen是函数;

    (2)sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以''''结尾的;

    (3)数组做sizeof的参数不退化,传递给strlen就退化为指针了;

    更多见百科。

    区别举例:

    (1)针对静态数组:

    1 char str[20]="0123456789";
    2 int a=strlen(str);      //a=10
    3 int b=sizeof(str);      //b=20;

    (2)针对指针

    1 char* ss = "0123456789";    //ss是指向字符串常量的字符指针
    2 sizeof(ss)      //结果 4,sizeof 获得的是一个指针的值所占的空间,应该是长整型的,所以是4
    3 sizeof(*ss)     //结果 1, *ss是第一个字符 其实就是获得了字符串的第一位'0' 所占的内存空间,是char类型的,占了 1 位
    4 strlen(ss)= 10  //如果要获得这个字符串的长度,则一定要使用 strlen

    注:从对比知,若想获得一个字符串的长度,一定要使用strlen 

  • 相关阅读:
    【LeetCode】3Sum Closest 解题报告
    LOJ#6277. 数列分块入门 1
    洛谷P1919 【模板】A*B Problem升级版(FFT快速傅里叶)
    LOJ #108. 多项式乘法
    快速傅里叶变换(FFT)详解
    HDU 5536 Chip Factory
    洛谷P4093 [HEOI2016/TJOI2016]序列
    洛谷P2633 Count on a tree
    HDU 4825 Xor Sum
    洛谷T21778 过年
  • 原文地址:https://www.cnblogs.com/love-yh/p/7298253.html
Copyright © 2020-2023  润新知