`
king_tt
  • 浏览: 2083649 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

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++语言基本概念,包括保留字、字符串、指针和引用、结构体、...

    sizeof和strlen区别

    分析sizeof和strlen具体区别(源码和解析)

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

    数据结构 C++/C 面试题大全集共享 学习

    C/C++笔试题(附答案,华为面试题系列)

    答:函数和变量被C++编译后在符号库中的名字与C语言的不同,被extern "C"修饰的变 量和函数是按照C语言方式编译和连接的。由于编译后的名字不同,C++程序不能直接调 用C 函数。C++提供了一个C 连接交换指定符号...

    sizeof与strlen区别

    本文介绍的是sizeof与strlen区别

    c语言strlen转义字符,转义字符 & sizeof & strlen-CSDN博客.mhtml

    c语言strlen转义字符,转义字符 & sizeof & strlen-CSDN博客.mhtml

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

    多年收集的c、c++经典书籍汇总 华为笔试面试题面试宝典 嵌入式 深入理解指针

    C++开发面试知识点-C、C++、C++11、C++14

    自己秋招根据面经和基础知识学习总结的知识点,主要内容包括但不限于:volatile关键字、sizeof & strlen、const的作用、enum、inline、delete[] 与 delete、多态的作用、C++与Python的区别、深拷贝与浅拷贝、extern ...

    解析C语言中的sizeof.rar

    析Sizeof的用途

    详细解析C语言中的sizeof

    详细解析C语言中的sizeof详细解析

    sizeof和strlen的区别

    sizeof操作符的一个主要用途是与存储分配和I/O系统那样的例程进行通信。例如:void *malloc(sizex_t size), size_t fread(void * ptr, size_t size, size_t nmemb, FILE * stream)

    C语言中sizeof()与strlen()的区别详解

    sizeof()和strlen()经常会被初学者混淆,但其中有有很大区别: sizeof() 1. sizeof()【操作数所占空间的字节数大小】是一种c中的基本运算符。 可以以类型、指针、数组和函数等作为参数。 头文件类型为unsigned int。...

    sizeof 和strlen 区别.pdf

    总结sizeof 和strlen的区别: sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。它的功能是:获得保证能容纳实现所建立的最大对象的字节...

    c/c++ 学习总结 初学者必备

    2.sizeof是运算符,而strlen是C库函数strlen只能用char*做参数,且以'\0'结尾的; 对于静态数组处理: char str[20]="0123456789"; strlen(str)=10; //表示数组中字符串的长度 sizeof(str)=20; //表示数组变量...

    sizeof 和strlen的区别

    sizeof 和strlen的区别

    c/c++ windows hid串口通信

    c/c++ windows 通过hidsdi进行串口通信 GUID InterfaceClassGuid = { 0x4d1e55b2, 0xf16f, 0x11cf, { 0x88, 0xcb, 0x00, 0x11, 0x11, 0x00, 0x00, 0x30 } }; SP_DEVINFO_DATA devinfo_data; SP_DEVICE_INTERFACE_...

    C语言面试题以及C重要知识点祥解

    精心在网上搜集整理C面试题以及C笔试时常考的各种知识点讲解,都看过之后,相信你必有所不小收获。包括: A.经典笔面试题(虽然有点老,但是基础的东西一直未变,很具有参考价值) 1.华为 2.微软 等等。。 B.知识点...

    C语言中的sizeof操作符用法及和strlen的区别

     sizeof是C/C++中的一个操作符(operator),简单的说其作用就是返回一个对象或者类型所占的内存字节数。其返回值类型为size_t,在头文件stddef.h中定义。在32位系统中: char的sizeof值为1,char是我们编程能用的...

Global site tag (gtag.js) - Google Analytics