字符'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. asp.net ToString()格式汇总

    C 货币 2.5.ToString("C") ¥2.50 D 十进制数 25.ToString("D5") 00025 E 科学型 25000.ToString ...

  2. Oracle数据库中char, varchar, nvarchar的差异

    1. char      固定长度,最长n个字符.   2. varchar      最大长度为n的可变字符串. (n为某一整数,不同数据库,最大长度n不同)   char和varchar区别:   ...

  3. 机器学习技法-神经网络(NNet)

    课程地址:https://class.coursera.org/ntumltwo-002 重要!重要!重要~ 一.神经网络(NNet)的动机 神经网络有很久的历史,由感知机(perceptron)模型 ...

  4. dedecms SQL数据库连接信息注解(借鉴)

    <?php $cfg_dbhost = 'localhost'; //数据库地址,这里的localhost指的是本机$cfg_dbname = 'hunuo'; //数据库名$cfg_dbuse ...

  5. R 读取clipboard内容 (MAC)

    在mac上,R读取复制的data.很简单,一行命令 read.table(pipe("pbpaste"))

  6. Wamp安装使用+Git for Windows

    相信很多朋友都曾在windows上做过web开发,我们常用的Web应用程序平台是:Apache+Mysql+Perl/PHP/Python,在windows下集成称为WAMP.web开发新手有时候由于 ...

  7. java script 闭包

    闭包的概念真的是很绕,我就来点实际的代码. 当我用下面的代码的时候 发生了闭包,当执行onclick事件的时候,变量一直引用了外部函数的变量,结果i总是4 function newLoad() { / ...

  8. 2015GitWebRTC编译实录5

    2015.07.20 libaudio_encoder_interface/libaudio_decoder_interface 编译通过将encoder,decoder两个lib合并了,后面需要看看 ...

  9. leetcode 121. Best Time to Buy and Sell Stock ----- java

    Say you have an array for which the ith element is the price of a given stock on day i. If you were ...

  10. MongoDB副本集搭建及备份恢复

    一.MongoDB副本集(repl set)介绍 早起版本使用master-slave,一主一从和MySQL类似,但slave在此架构中为只读,当主库宕机后,从库不能自动切换为主: 目前已经淘汰了ma ...