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

来源:互联网 发布:plsql导入数据和表结构 编辑:程序博客网 时间:2024/06/05 19:54

程序

#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,但前者我就不知道了,哪位大神可以告诉我

0 0