字符'x'于字符串"x"的区别

  'x' 属于基本类型(char)字符类型-----------------由1个字符组成('x')

  "x"属于派生类型(char数组)字符串类型-----------由2个字符组成('x'和空字符'\0')

  

strlen函数与sizeof操作符

  

  strlen函数原型为 extern int strlen(char *s) ,用来计算字符串s的长度(不包括'\0'),使用时需要引入头文件 #include <string.h>

  sizeof是C语言的一种单目操作符,同其他操作符++、--等类似,它并不是函数。其作用就是返回一个对象或者类型所占的内存字节数

  sizeof的示例程序:

#include <stdio.h>

int main(void)
{
char* str1="absde"; //指向字符串的指针
char str2[]="absde";
char str3[]={'a',};
printf("sizeof(str1) = %d\n",sizeof(str1));
printf("sizeof(str2) = %d\n",sizeof(str2));
printf("sizeof(str3) = %d\n",sizeof(str3)); return ;
}

  

  运行结果:

  

  

  【分析】

  str1是一个指针,只是指向了字符串"absde"而已。所以sizeof(str1)不是字符串占的空间也不是字符数组占的空间,而是一个字符型指针占的空间。在C/C++中一个指针占4个字节,所以sizeof(str1)=4

  str2是一个字符型数组。C/C++规定,对于一个数组,返回这个数组占的内存空间。"absde"中,共有'a','b','s','d','e','\0'六个字符,所以sizeof(str2)=6*sizeof(char)=6

  str3已经定义成了长度是8的字符数组,分配了8个字节的内存空间,所以sizeof(str3)=8

  总之,对于指针,sizeof操作符返回这个指针占的内存空间,一般是4个字节;而对于一个数组,sizeof返回这个数组所有元素占的总空间。char*与char[]容易混淆,一定要分清,而char* str1="absde"的写法现在也不被提倡,应予以避免。

  关于二者的区别可见以下程序

#include <stdio.h>
#include <string.h> //strlen函数的头文件
#define PRAISE "What a super marvelous name!" //测试字符串
int main(void)
{
char name[] = "Wsying"; //测试字符串
printf("strlen = %d sizeof = %d\n",strlen(name), sizeof(name));
printf("strlen = %d sizeof = %d\n",strlen(PRAISE), sizeof(PRAISE)); return ;
}

  运行结果:

  

  【分析】

  对于name这个字符数组(字符串),strlen的返回值6恰好为"wsying"的长度(‘\0’之前停止计数);因为我们声明了name数组包含了40个单位的char型,1个char型在内存中占据1个字节,所以sizeof的运算结果为name在内存中占据的字节数为40;

  对于PRAISE(即"What a super marvelous name!")这个字符串,sizeof运算结果比strlen的结果大1,字符串占据的字节数(char类型仅占1个字节)比他的长度大1,这是因为sizeof把结束字符'\0'也算进去了('\0'也要占据内存空间),我们并没有像name那样定义为这个字符串分配多大内存,计算机自己计算它占据的字节数。

C语言strlen函数和sizeof操作符的更多相关文章

  1. strcpy,strlen, strcat, strcmp函数,strlen函数和sizeof的区别

    //计算字符串实际长度        //strlen()函数:当遇到'\0'时,计算结束,'\0'不计入长度之内,如果你只定义没有给它赋初值,这个结果是不定的,它会从首地址一直找下去,直到遇到'\0 ...

  2. c语言之sizeof总结+strlen函数

    一.sizeof的概念 Sizeof是C语言的一种单目操作符,如C语言的其他操作符++.–等.它并不是函数.Sizeof操作符以字节形式给出了其操作数的存储大小.操作数可以是一个表达式或括在括号内的类 ...

  3. C++ sizeof操作符的用法和strlen函数的区别

    摘要:本人首先介绍了C++中sizeof操作符的用法和注意事项,其次对比了和strlen的区别和使用,方便大家在写代码的时候查阅,和面试.笔试的时候复习. 目录: sizeof的用法: sizeof和 ...

  4. C++中sizeof操作符与strlen函数

    sizeof操作符: sizeof是一个操作符,返回一条表达式或一个类型名字所占的字节数.返回值一个常量表达式,类型为size_t. size_t sizeof(type) size_t sizeof ...

  5. sizeof运算符和strlen函数的区别

    1.sizeof是运算符,而strlen是函数. 2.sizeof操作符的运算结果为size_t,他在头文件中的typedef为unsigned int.该类型保证能容纳所操作对象的最大字节大小. 3 ...

  6. 字符串 前篇 ---- sizeof()操作符和strlen()库函数

    本文不是研究sizeof(), strlen() 的深奥定义和原理,我们不会在理论上太过钻牛角尖.希望读这篇文章的你,也不要太过抠概念(不要拘泥于语法).我们只做 实用意义 的介绍和讨论. 在介绍字符 ...

  7. C语言中sizeof、strlen函数的部分理解

    一.测试环境 Win10 + Visual Studio 2017 二.测试代码 #include "pch.h" #include <iostream> #inclu ...

  8. sizeof和strlen函数区别

    一.sizeof    sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组.指针.类型.对象.函数等.    它的功能是:获得保 ...

  9. C语言-字符串函数的实现(一)之strlen

    C语言中的字符串函数有如下这些 获取字符串长度 strlen 长度不受限制的字符串函数 strcpy strcat strcmp 长度受限制的字符串函数 strncpy strncat strncmp ...

随机推荐

  1. URAL 2040 (回文自动机)

    Problem Palindromes and Super Abilities 2 (URAL2040) 题目大意 给一个字符串,从左到右依次添加,询问每添加一个字符,新增加的回文串数量. 解题分析 ...

  2. 2012开源项目计划-WPF企业级应用整合平台

    2012开源项目计划-WPF企业级应用整合平台 开篇 2012年,提前祝大家新年快乐,为了加快2012年的开发计划,特打算年前和大家分享一下2012年的开发计划和年后具体的实施计划,希望有兴趣或者有志 ...

  3. 转:服务器控件的 ID,ClientID,UniqueID 的区别

    动态加载用户控件的怪问题 动态加载用户控件的时候,会因为调用一些控件的一些属性和方法而造成控件命名混乱. 因为add 一个用户控件或者 loadcontrol 的时候 如果没有指定控件的id,clie ...

  4. Git工作常用

    工作时,最好每次都创建一个本地分支,这样就会减少错误修改远程代码的机会. 基于远程dev分支创建分支并切到本地分支: git checkout -b <local_dev> -t orig ...

  5. 7-zip的压缩的时候排除某目录

    安装暂且不说了. 看一下帮助. [root@localhost Server]# 7z -Zip [] - Igor Pavlov -- p7zip Version ,Utf16=on,HugeFil ...

  6. [转载] codeblocks快捷键

    ==日常编辑== • 按住Ctrl滚滚轮,代码的字体会随你心意变大变小. • 在编辑区按住右键可拖动代码,省去拉(尤其是横向)滚动条之麻烦:相关设置:Mouse Drag Scrolling. • C ...

  7. POJ 3461 裸的KMP

    直接贴代码吧 #include<cstdio> #include<cstring> ],T[]; ]; int n,m; void getfail() { f[] = ; f[ ...

  8. POJ 1523 SPF(寻找关节点)

                                                                         SPF Time Limit: 1000MS   Memory ...

  9. POJ1236 Network of Schools (强连通)(缩点)

                                                                Network of Schools Time Limit: 1000MS   ...

  10. Android系统 小米/三星/索尼 应用启动图标未读消息数(BadgeNumber)动态提醒

    http://www.51itong.net/android-badgenumber-9789.html Android系统 小米/三星/索尼 应用启动图标未读消息数(BadgeNumber)动态提醒 ...