【笔试常考】C语言:深度剖析strlen,sizeof

在之前的博客中,我也探索过strlen,sizeof区别,详情可见博客http://10740184.blog.51cto.com/10730184/1705820

关于strlen,sizeof均可求字符串长度,这两者是笔试面试常考的知识点


#include<stdio.h>
#include<stdlib.h>
#include<string.h>

//void Test1()
//{
//    char* arr = "hello world!";
//    int len1 = sizeof(arr);    //4,地址的大小均为4字节
//    int len2 = strlen(arr);    //12,找到‘\0’,共12字节
//    printf("sizeof:%d\n", len1);
//    printf("strlen:%d\n", len2);
//}

//void Test2()
//{
//    char arr[20] = "hello world!";
//    int len1 = sizeof(arr);    //-->20只看类型大小
//    int len2 = strlen(arr);    //12,找到‘\0’,没有‘\0‘长度
//    printf("sizeof:%d\n", len1);
//    printf("strlen:%d\n", len2);
//}

//void Test3()
//{
//    char arr[] = "hello world!";
//    int len1 = sizeof(arr);    //13,有‘\0’长度
//    int len2 = strlen(arr);    //12,找到‘\0‘,无‘\0’长度
//    printf("sizeof:%d\n", len1);
//    printf("strlen:%d\n", len2);
//}

//void Test4()
//{
//    char arr[] = { ‘h‘, ‘e‘, ‘l‘, ‘l‘, ‘o‘ };
//    int len1 = sizeof(arr);    //5,自己判断出长度,无‘\0‘长度
//    int len2 = strlen(arr);    //随机值,找不到‘\0‘
//    printf("sizeof:%d\n", len1);
//    printf("strlen:%d\n", len2);
//}

void Test5()
{
    char arr[10] ;
    int len1 = sizeof(arr);    //10,自己判断出长度,无‘\0‘长度
    int len2 = strlen(arr);    //随机值,找不到‘\0‘
    printf("sizeof:%d\n", len1);
    printf("strlen:%d\n", len2);
}
int main()
{
    /*Test1();*/
    /*Test2();*/
    /*Test3();*/
    /*Test4();*/
    Test5();

    system("pause");
    return 0;
}
时间: 2024-12-29 07:50:49

【笔试常考】C语言:深度剖析strlen,sizeof的相关文章

读书笔记之:C语言深度剖析

读书笔记之:C语言深度剖析 <C 语言深度解剖>这本书是一本“解开程序员面试笔试的秘密”的好书.作者陈正冲老师提出“以含金量勇敢挑战国内外同类书籍”,确实,这本书中的知识点都是一些在面试中常见的考点,并且很多都是我们平常不注意的点,对于我们深入理解C语言确实很有帮助. 第1章关键字 1.register虽然寄存器的速度非常快,但是使用register修饰符也有些限制的:register变量必须是能被CPU寄存器所接受的类型.意味着register变量必须是一个单个的值,并且其长度应小于或等于整

[ 1011] &lt;&lt;C语言深度剖析&gt;&gt; 测试 TEST

/******************************** **  wzsts<C语言深度剖析>2016 ** **                    ** **     fun1~fun6代表6章节内容 ** **fun10~fun19代表fun1所调用函数 ** **                    ** **     世界因规则而美好     ** ** #if(1)可运行,#if(0)不运行. ** ** Data  Author   PC       ** **16

面试笔试常考的mysql 数据库操作group by

IT 面试中,数据库的相关问题基本上属于必考问题,而其中关于sql语句也是经常考察的一个重要知识点. 下面介绍下sql语句中一个比较重要的操作group by,他的重要行一方面体现在他的理解困难度,一方面体现应用中的长见性. 首先,给出一个studnet学生表: CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(30) DEFAULT NULL, `sex` tinyint(1) DEFAU

编程珠玑之关键字(1)--《c语言深度剖析》整理(转)

一.最快关键字register 关键字regiter请求编译器尽可能的将变量存在CPU的寄存器中.有几点注意的地方. 1.register变量必须是能被CPU寄存器所接受的类型,这通常意味着register变量必须是一个单个的值,并且其长度应小于或等于整型的长度. 但是,有些机器的寄存器也能存放浮点数. 2.register变量可能不存放在内存中,所以不能用取址符运算符“ & ”. 3.只有局部变量和形参可以作为register变量,全局变量不行. 4.静态变量不能定义为register.  总

C语言笔试常考知识点

1. const 关键字 a)  const int a; b)  int const a; c)  const int *a; d)  int * const a; e)  int const * const a; 解析: a)  a为一个int型变量,在它被定义时就应当对其初始化,因为以后就没有机会再去改变它了. b)  与 a) 是一个意思,const 与 int 的位置可以互换. c)  const 与 int 修饰的都是 (*a) ,这里的a是一个指向 int 型变量的指针,指针 a

《C语言深度剖析》笔记

关键字: C语言关键字32个: 关键字                                         意 义 auto                           声明自动变量,缺省时编译器一般默认为 auto int                               声明整型变量 double                       声明双精度变量 long                            声明长整型变量 char         

C语言深度剖析自测题8解析

#include <stdio.h> int  main(void) {    int  a[5] = {1, 2, 3, 4, 5}; int* ptr1 = (int*)(&a + 1); int* ptr2 = (int*)((int)a + 1); printf("%x, %x\n", ptr1[-1], *ptr2); } 这个题目主要是考了两个知识点一个是指针的知识,第二个是大端机和小端机的知识 首先需要明确x86是小端机,所以它的数值在各个字节中的顺序

C语言深度剖析——读书笔记

1. 什么是定义,什么是声明? 定义:编译器创建一个对象,并为这个对象分配一块内存,给它取上一个名字. 声明:1>告诉编译器这个名字已经已经分配到一块内存上了 2>告诉编译器这个名字已经被预定了,别的地方不能再用它来作为变量名或对象名. 2. auto: 在缺省的情况下,编译器默认所有的变量都是auto的, 3. register: register变量必须是单个的值,并且其长度应该小于或等于整形的长度,而且register变量可能不存放在内存中,所以不能用&--取地址符来获取regi

笔试常考的Java基础

1. Socket编程:ServerSocket (int port) :Creates a server socket, bound to the specified port. Socket(InetAddress address, int port) :Creates a stream socket and connects it to the specified port number at the specified IP address. 2. Java接口知识:接口中的变量默认是p