sizeof 与 strlen 的区别及使用

1、问题描述

What is the output of the following code?

#include <iostream>
#include <stdlib.h>

using namespace std;

int main()
{

    char *ss1 = "0123456789";
    char ss2[] = "0123456789";
    char *str1 = (char*)malloc(100);
    void *str2 = (void *)malloc(100);

    cout << sizeof(ss1) << endl;
    cout << sizeof(ss2) << endl;
    cout << sizeof(str1) << endl;
    cout << sizeof(str2) << endl;

    return 0;
}

2、结果

4
11
4
4

3、析

对于指针,sizeof操作符返回这个指针占的空间,一般是4个字节;而对于一个数组,sizeof返回这个数组所有元素占的总空间。

char * 与 char[] 容易混淆,而且 char *p = "aa"; 这样的写法现在不被提倡,应尽量避免这样使用。

而strlen是不区分是数组还是指针的,就读到\0 为止返回长度。而且strlen 是不把 \0 计入字符串的长度的。

时间: 2024-10-24 19:49:07

sizeof 与 strlen 的区别及使用的相关文章

C++Sizeof与Strlen的区别与联系

一.sizeof    sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组.指针.类型.对象.函数等.    它的功能是:获得保证能容纳实现所建立的最大对象的字节大小.    由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小.实际上,用sizeof来返回类型以及静态分配的对象.结构或数组所占的空间,返回值跟对象.结构.数组所存储的内容没有关系.    具体而言,当参数分别如下时,sizeof返回的值表示

sizeof与strlen的区别

本文列举了sizeof与strlen的区别,总结一下: sizeof()的结果是一个对象占用的字节数,对于字符串包括字符串结尾的\0. strlen()的结果不包括\0. 下面是源码: #include <stdio.h> int main() { int i = 0; char acNum[] = "12345"; ; char ac3Num[3] = "12"; char *pcNum = "12345" //printf(&qu

sizeof和strlen的区别

char str[20]="0123456789"; int   a=strlen(str); /*a=10;strlen 计算字符串的长度,以\0'为字符串结束标记. int   b=sizeof(str); /*b=20;sizeof 计算的则是分配的数组str[20] 所占的内存空间的大小,不受里面存储的内容影响 char *str1="absde"; char str2[]="absde";char str3[8]={'a',};char

【转】Sizeof与Strlen的区别与联系

一.sizeof    sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组.指针.类型.对象.函数等.    它的功能是:获得保证能容纳实现所建立的最大对象的字节大小.    由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小.实际上,用sizeof来返回类型以及静态分配的对象.结构或数组所占的空间,返回值跟对象.结构.数组所存储的内容没有关系.    具体而言,当参数分别如下时,sizeof返回的值表示

Sizeof与Strlen的区别与联系(转)

一.sizeof sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组.指针.类型.对象.函数等.    它的功能是:获得保证能容纳实现所建立的最大对象的字节大小.    由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小.实际上,用sizeof来返回类型以及静态分配的对象.结构或数组所占的空间,返回值跟对象.结构.数组所存储的内容没有关系.    具体而言,当参数分别如下时,sizeof返回的值表示的含义

详说sizeof与strlen的区别与联系

sizeof是C/C++中的关键字,它是一个运算符,其作用是取得一个对象(数据类型或者数据对象)的长度(即占用内存的大小,以byte为单位). 当参数分别如下时,sizeof返回的值表示的含义如下: 数组--编译时分配的数组空间大小: 指针--存储该指针所用的空间大小(存储该指针的地址的长度,是长整型,应该为4): 类型--该类型所占的空间大小: 对象--对象的实际占用空间大小: 函数--函数的返回类型所占的空间大小.函数的返回类型不能是void. strlen是函数,要在运行时才能计算.参数必

C++(C)中Sizeof与Strlen的区别

C++(C)中Sizeof与Strlen的区别 一.知识总结: 1.sizeof (1).使用方法 sizeof为运算符 sizeof unary-expression sizeof ( type-name ) (2).运行阶段 sizeof在编译时计算. (3).返回值 sizeof:获取对象所分配的字节大小. 用sizeof来返回类型以及静态分配的对象.结构或数组所占的空间,返回值跟对象.结构.数组所存储的内容没有关系. 具体而言,当参数分别如下时,sizeof返回的值表示的含义如下: 数组

Sizeof与Strlen的区别与联系(转)

Sizeof与Strlen的区别与联系 一.sizeof     sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组.指针.类型.对象.函数等.     它的功能是:获得保证能容纳实现所建立的最大对象的字节大小.     由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小.实际上,用sizeof来返回类型以及静态分配的对象.结构或数组所占的空间,返回值跟对象.结构.数组所存储的内容没有关系.     具体

Sizeof与Strlen的区别【转】

本文转载自:http://www.cnblogs.com/carekee/articles/1630789.html Sizeof与Strlen的区别与联系 一.sizeof    sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组.指针.类型.对象.函数等.    它的功能是:获得保证能容纳实现所建立的最大对象的字节大小.    由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小.实际上,用sizeof

【C++基础】sizeof 与 strlen的区别

要理解两者的区别,就要分别理解他们的本质 strlen(char *) 计算字符串的长度,内部实现是用一个循环计算字符串的长度,直到‘\0’为止 1.srtlen 是一个函数,参数只能为char 或者 string (sizeof是运算符,可以对好多类型作sizeof,如struct, class等) 2.对数组作sizeof不退化为指针,传递给strlen就退化为指针 3. char ss[100]="012345467"; cout << strlen(ss) <