字符串中sizeof和strlen的区别,以及'\0'与NULL的区别

本文详细解析了C++中使用字符串和字符数组时的细微差别,特别是关于`strlen()`和`sizeof()`函数的输出不同。通过具体代码示例,揭示了字符数组在赋值时自动添加的结束标志`''`是如何影响这两个函数的返回值,并解释了打印`''`和`NULL`的不同输出原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

程序

#include<iostream>
#include<string.h>
using namespace std;
int main()
{
  char ss[]="0123456789";
  cout<<strlen(ss)<<endl;
  cout<<sizeof(ss)<<endl;
  for(int i=0;i<strlen(ss);i++)
  {
   cout<<ss[i] <<endl;
  }
  cout<<'\0'<<endl; 
  cout<<NULL<<endl; 
  return 0;
}

运行结果

这里写图片描述
从中可以发现:

  1. strlen(ss)的结果为10,而sizeof(ss)的结果却是11,这是为什么呢?
    原因是当用字符串给字符数组赋值时,字符数组默认在其末尾加上结束标志,也就是’\0’,即字符数组的最后一个字符为’\0’。strlen()函数计算到结束标志的前一个字符,在这里是’9’,所以结果为10;而sizeof()则计算到结束标志,所以结果为10+1=11。
    strlen()函数的实现:

    int strlen(char s[])
    {
    int num=0;
    int i=0;
    while(s[i]!='\0')
    {
    num++;
    i++;
    }
    return num;
    }
  2. 打印’\0’时输出为空,而打印NULL却输出为0。后者是因为NULL在C++中值定义为0,但前者我就不知道了,哪位大神可以告诉我

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值