`
aijuans
  • 浏览: 1567865 次
社区版块
存档分类
最新评论

C语言 sizeof和strlen之间的那些事 C/C++软件开发求职面试题 必备考点(一)

阅读更多

        找工作在即,以后决定每天至少写一个知识点,主要是记录,逼迫自己动手、总结加深印象。当然如果能有一言半语让他人收益,后学幸运之至也。如有错误,还希望大家帮忙指出来。感激不尽。

       后学保证每个写出来的结果都是自己在电脑上亲自跑过的,咱人笨,以前学的也半吊子。很多时候只能靠运行出来的结果再反过来总结,再结合书上讲的,才能融为自己的。环境为:Fedora14  GCC / g++编译器 32位

     第一课,就来搞sizeof和strlen吧。

sizeof是一个单目操作符,而不是函数。作用是计算其操作数的存储空间。操作数可以是一个表达式或者一个类型。如sizeof(int)。而strlen是一个函数,只能用char *做参数,且必须是以'\0'结尾的,计算有效字符串的字符数。

示例:

#include <stdio.h>
void main()
{
   char str[]="yanguoqi";
   char *p = str;
   printf("sizeof(str) = %d\n", sizeof(str));
   printf("strlen(str) = %d\n", strlen(str));
   printf("sizeof(p) = %d\n", sizeof(p));
    printf("strlen(p) = %d\n", strlen(p));
}

[root@localhost learn]# gcc test.c -o out
test.c: 在函数‘main’中:
test.c:7:33: 警告:隐式声明与内建函数‘strlen’不兼容

运行结果:

[root@localhost learn]# ./out 
sizeof(str) = 9: sizeof是返回的保证能容纳实现所建立的最大对象的字节大小。在32位pc下,一个字符占一个字节,

一共8个字符,加最后的'/o'.共9个字节。 


strlen(str) = 8:  这是有效字符的个数,不把'/0'算在内。
sizeof(p) = 4:   这里p是一个指针型变量,在32位PC下占4个字节。一般指针都占4个字节。
strlen(p) = 8:   同上。

再试下能想到的其他情况,

char *p = “yanguoqi”

sizeof(p)=4

strlen(p)=8,

char str[100] = "yanguoqi",strlen(str)=8,sizeof的结果应该是100.

int p[100], sizeof(p) = 100*4,strlen会报错。

最后来看个迷惑性强的,

void fun(char str[100])

{

     sizeof(str)=???

}

     这里还是等于4,str是函数的参数,sizeof运算的时候将其当成了指针。而指针占4个字节。对于何种类型的指针,sizeof出来的大小都是固定的,32位pc下总是4.

     最后再如,char *p = "helloevery",在计算这种指针指向的字符串长度的时候,只能用strlen结果为10.

      一定要区分数组元素的个数,字符串长度两个概念的区别,后者不带'\0'.

下面是个小例子,加深下印象。函数void upgrade(str[]),将str中小写字母改成大写字母。



#include <iostream>
#include <string.h>


using namespace std;
void upgrade(char str[])
{
   for(int i=0; i<strlen(str); i++)    
      if('a'<=str[i]&&str[i]<='z')
      //str[i] = str[i] + ('A' - 'a');
       str[i]+='A' - 'a';
}
int main()
{
    
    char str[] = "HellEveryOne";
    cout<<str<<endl;
    upgrade(str);
    cout<<str<<endl;
    return 0;
}

linux下,c++程序后缀名可以不改为.cpp,用.c,  但一定要用g++来编译,而且要想用strlen必须加#include <string.h>.

[root@localhost learn]# g++ test.cpp -o out
[root@localhost learn]# ./out 
HellEveryOne
HELLEVERYONE

分享到:
评论

相关推荐

    C/C++程序员面试指南.杨国祥(带详细书签).pdf

    C、C++语言是IT行业的主流编程语言,也是很多程序员必备的软件基本功,是软件开发行业招聘考查的重点。本书以流行的面试题讲解为主要内容,介绍了C、C++语言基本概念,包括保留字、字符串、指针和引用、结构体、...

    C/C++常见面试题

    ### C/C++常见面试题详解 #### 概念问答题 **1. static关键字在C与C++中的含义** - **C语言中的static**: 在C语言中,`static`主要用于控制变量的可见性和生命周期。 - 当`static`用于变量时,该变量成为静态...

    sizeof和strlen区别

    在C/C++编程语言中,`sizeof`和`strlen`是两个非常重要的操作符,它们分别用于获取数据类型的大小和字符串的长度。然而,这两个操作符有着本质的区别,理解和掌握它们的区别对于编写高效且无误的代码至关重要。 ...

    c/c++ 笔试面试题

    从标题"C/C++ 笔试面试题"和描述"搜集的C/C++笔试面试经典题目,有100多页doc"可以看出,这是一份C/C++语言的笔试面试题目集锦。 从标签"C C++ 笔试 面试"可以看出,这份文件的主要内容是关于C/C++语言的笔试和面试...

    50ge C/C++面试题

    从给定的文件信息中,我们可以总结出一系列关于C/C++的重要知识点,这些知识点涵盖了面试中常见的技术问题,包括变量的声明与定义、条件判断、数据类型比较、内存管理、关键字的理解以及宏定义等关键领域。...

    sizeof 数据结构 C++/C 面试题

    在C++和C编程语言中,`sizeof`运算符是一个非常重要的知识点,它用于计算一个类型或变量在内存中占用的字节数。这个运算符对于理解和优化代码,特别是涉及数据结构和内存管理的部分,至关重要。下面我们将深入探讨`...

    经典c/c++笔试面试题汇总

    2. **华为笔试面试题**:华为作为全球知名的科技公司,其笔试和面试题通常涵盖C/C++语言的基本语法、数据结构、算法、操作系统原理等内容,旨在考察候选人的编程基础和解决问题的能力。 3. **嵌入式开发**:嵌入式...

    C/C++经典面试50题 挑重点整理 程序员求职面试必备

    在C/C++编程语言中,面试常常涉及到一些基础但至关重要的知识点,比如`sizeof`和`strlen`的区别、`malloc`与`new`的不同以及数组和指针的使用。下面我们将详细探讨这些主题。 首先,`sizeof`和`strlen`是两个在处理...

    [面试/笔试系列9]C/C++经典面试题

    ### C/C++经典面试题详解 #### 面试题1:变量的声明和定义有什么区别? **声明**和**定义**是C/C++中非常重要的概念。了解它们之间的区别对于编写高质量的代码至关重要。 - **定义**: 当我们说一个变量被定义时,...

    c/c++1000道面试题汇总

    【C/C++面试题汇总】知识点详解 C/C++作为两种强大的编程语言,其面试题涵盖了语言基础、内存管理、程序设计等多个方面。以下是一些关键知识点的详细解析: 1. **变量的声明与定义的区别** - **声明**:告诉...

    C++和C语言面试题

    ### C++和C语言面试题解析 #### 面试题1:变量的声明与定义的区别 在C++和C语言中,变量的声明与定义有着本质的区别。**定义**不仅告诉编译器变量的类型和名称,还会为该变量分配内存空间。这意味着,一个变量只能...

    华为C/C++类笔试/面试题

    ### 华为C/C++类笔试/面试题解析 #### 一、基础知识考察题 **题目1:** 给出以下代码段: ```c++ int a = 4; (A) a += (a++); (B) a += (++a); (C) (a++) += a; (D) (++a) += (a++); a = ? ``` - **解答分析:** -...

    50个C、C++面试题.pdf

    综上所述,对于这些经典C/C++面试题的解析,不仅涉及到语言基础知识点,还包括了编程实践中的注意事项、最佳实践以及编译器行为的细节理解。掌握这些知识点对任何希望提高C/C++编程能力的开发者都是非常有价值的。

    C/C++ 面试题 试题

    【C/C++ 面试题 试题】 C/C++面试中常常涉及的题目涵盖了语言的基础概念、编程技巧、内存管理以及标准库的使用等多个方面。以下是对这些面试题的详细解答: 1. **BOOL, float, 指针变量与“零值”比较的 if 语句**...

    c/c++常见笔试面试题总结

    "C/C++笔试面试题总结" C/C++笔试面试题总结中涵盖了多个重要知识点,包括深度优先搜索与广度优先搜索算法的区别、动态内存申请方式、指针的概念和操作等。 深度优先搜索与广度优先搜索算法的区别: 深度优先搜索...

    C/C++面试试题2021

    C/C++面试试题2021 本资源汇总了2021年C++面试试题,涵盖了选择题、填空题和简答题等多种题型,涉及到C++语言的基础知识、面向对象编程、指针操作、内存管理等方面。 一、选择题(30分) 1. 下列语句中,错误的是...

    c/c++面试题

    在C/C++编程语言中,面试常常涉及到对基础概念、语法特性和高级特性的深入理解。以下是基于给定的面试题解析的一些关键知识点: 1. **变量声明与定义的区别** - 声明(Declaration)是告诉编译器变量的名字和类型...

    C和C++经典面试题(面试必备).docx

    C和C++经典面试题(面试必备)是一份集合了多个C和C++经典面试题的文档,涵盖了变量声明和定义、bool、int、float、指针变量的比较、sizeof和strlen的区别、static关键字的使用、malloc和new的区别、宏定义的使用等...

    解析C语言中的sizeof.rar

    在C语言中,`sizeof`是一个非常重要的运算符,它用于获取任何数据类型或变量所占用的内存字节数。这个运算符对于理解和优化代码、处理内存分配以及了解底层计算机工作原理都至关重要。下面我们将详细探讨`sizeof`的...

Global site tag (gtag.js) - Google Analytics