三九宝宝网宝宝教育教学论文

c语言中 sizeof strlen各自作用是什么及其区别

03月08日 编辑 39baobao.com

[在c语言中 char c 010是什么意思]010是line feed的ASCII码,是换行的意思。 在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的...+阅读

siezeof 只的是所占的空间,

strlen 判定的是以0x00结尾的长度,遇到'0'后就会跳出。

第一种情况

char a[] = "movie" 在内存中分别占用"m o v i e \0" 六个字符 sizeof(a)大小是6. strlen(a) 函数计算到\0字符后会跳出,所以结果是5.

b[10] = "movie"; 内存占用为"m o v i e \0 0 0 0 0"后面几个是初始化值,不一定为0.

同理sizeof(b) 自然为10, strlen(b) 函数遇到\0 即判断完成跳出,所以为5.

第二种情况。

b[5] = "movie" 占用内存 “m o v i e”,因为你只分配了五个字符,所以本来应该有的最后一个'\0'字符被溢出。所以sizeof(b)还是5,strlen(b)会因为找不到'\0'而出现错误的值。这个值也有可能是对的,有可能是错的,看内存情况了。

请问C语言中 sizeof怎么用

2. 语法:

sizeof有三种语法形式,如下:

1) sizeof( object ); // sizeof( 对象 );

2) sizeof( type_name ); // sizeof( 类型 );

3) sizeof object; // sizeof 对象;

所以,

int i;

sizeof( i ); // ok

sizeof i; // ok

sizeof( int ); // ok

sizeof int; // error

既然写法3可以用写法1代替,为求形式统一以及减少我们大脑的负担,第3种写法,忘

掉它吧!

实际上,sizeof计算对象的大小也是转换成对对象类型的计算,也就是说,同种类型的

不同对象其sizeof值都是一致的。这里,对象可以进一步延伸至表达式,即sizeof可以

对一个表达式求值,编译器根据表达式的最终结果类型来确定大小,一般不会对表达式

进行计算。如:

sizeof( 2 );// 2的类型为int,所以等价于 sizeof( int );

sizeof( 2 + 3.14 ); // 3.14的类型为double,2也会被提升成double类型,所以等价

于 sizeof( double );

sizeof也可以对一个函数调用求值,其结果是函数返回类型的大小,函数并不会被调用

,我们来看一个完整的例子:

char foo()

{

printf("foo() has been called.\n");

return 'a';

}

int main()

{

size_t sz = sizeof( foo() ); // foo() 的返回值类型为char,所以sz = sizeof(

char ),foo()并不会被调用

printf("sizeof( foo() ) = %d\n", sz);

}

C99标准规定,函数、不能确定类型的表达式以及位域(bit-field)成员不能被计算s

izeof值,即下面这些写法都是错误的:

sizeof( foo );// error

void foo2() { }

sizeof( foo2() );// error

struct S

{

unsigned int f1 : 1;

unsigned int f2 : 5;

unsigned int f3 : 12;

};

sizeof( S.f1 );// error

关于C语言中sizeof函数的问题

在C/C++中,sizeof是操作符而不是函数,所以那对()不是必须的,在没有歧意时可以不写。sizeof操作符用来检测系统为跟在后面的变量、类型符分配了多少个字节。下面的代码可帮助理解:

//#include "stdafx.h"//If the vc++6.0, with this line.

#include "stdio.h"

int main(void){

char x,*p=&x;

printf("%d\n",sizeof p);//输出4,说明系统为p分配了4字节来存放x的地址

printf("%d\n",sizeof *p);//输出1,说明系统为*p分配了1字节,也就是为x分配了1字节

printf("%d\n",sizeof x);//与上一行比较

return 0;

}

以下为关联文档:

C语言中取余%就是取余数运算,也就是模运算(mod)。 10/3在C语言里是整除的意思,结果是3 10%3是求余,结果是余数1 10.0/3会转换为两个double型的数相除,答案是3.3333 C语言是一门通用计算机编程...

C语言中合并有序数组不要用C写int a[20],b[20],c[40];//全局数组 void main() { int i,n,m; scanf("%d",&n); for(i = 0; i<n ; i++) scanf("%d",&a[i]); scanf("%d",&m); for(i = 0; i<m ; i++) scanf("%d",&b[i]...

C语言中数组的排序方法中选择排序的原理是,每次从待排序数字中挑选出最大(最小)数字,放在有序序列的末尾。实际操作中,只需要在这个数组中将挑出来的数字与前面的数字交换即可。 例如: 4 1 5 2 3 找到最小...

c语言题目 c语言程序中当调用函数时哪个正确c语言程序中,当调用函数时,实参和形参各占一个独立的存储单元。 C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存...

c语言中绘制图形#include<stdio.h> void menu() { int a; printf("1.绘制矩形:\n"); printf("2.绘制正方形:\n"); printf("3.退出\n"); printf("请选择:"); } void regt(int a,int b) { int i,j; for(i=0;...

C语言中定义一个结构体如何在不同的 C文件中使用比如三个.c文件一个.h文件 1. c 2.c 3.c 4.h 这三个头文件都引用4.h include<4.h> 4.h中定义一个结构体类型struct test{}; 1.c中定义一个该结构体类型的全局变量struct tes...

在c语言C或G中如何嵌入汇编今天有点时间,重新改下了下,为避免因编译器和平台实现而出现的问题,我写了三个版本,分别是windows下vc6.0,windows下mingw和cygwin和linux下的gcc/g++。vc6.0:#includeconst cha...

在汇编语言中怎么加入C语言第一题 直接嵌入汇编代码的方法: 1、在 C 文件中要嵌入汇编代码片以如下方式加入汇编代码: #pragma ASM ; Assembler Code Here #pragma ENDASM 2、在 Project 窗口中包含汇编...

C语言 C语言 C语言简介C语言 C语言 C语言简介,C语言简介:C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程...

推荐阅读
图文推荐