1. 程式人生 > >【linux c】sizeof與strlen的區別簡述_學習筆記_008

【linux c】sizeof與strlen的區別簡述_學習筆記_008

通過一個簡單的程式來了解sizeof和strlen的用法,以及和二者的區別。
#include <stdio.h>
#include <string.h>

void size()
{
    printf("\n**************************\n");

    char *ptr1 = "Hello word";
    char ptr2[] = "Hello word";
    char ptr3[100] = "Hello word";

    printf("sizeof (*ptr1) = %d\n",sizeof (ptr1));		//測量char *ptr的長度
    printf("strlen(*ptr1) = %d\n",strlen(ptr1));		//測量字串的長度
    printf("sizeof (ptr2[]) = %d\n",sizeof (ptr2));
    printf("strlen(*ptr2[]) = %d\n",strlen(ptr2));
    printf("sizeof (ptr3[]) = %d\n",sizeof (ptr3));
    printf("strlen(*ptr3[100]) = %d\n",strlen(ptr3));
    printf("\n");
    
	printf("sizeof (long) = %d\n",sizeof (int));		//測量int型的長度
    printf("sizeof (short) = %d\n",sizeof (short));
	printf("sizeof (long) = %d\n",sizeof (long));
	printf("sizeof (long long) = %d\n",sizeof (long long));
    printf("sizeof (float) = %d\n",sizeof (float));
    printf("sizeof (double) = %d\n",sizeof (double));
	printf("sizeof (char) = %d\n",sizeof (char));


    printf("\n**************************\n");
}

int main()
{
    size();
	
	return 0;
}
<span style="font-size:18px;">結果如下</span>


在實際操作中發現,sizeof的書寫格式為:

sizeof(空格)(需要測量的變數名或資料型別)

其中空格可有可無,對變數的測量還可寫成:

sizeof(空格)變數名

測量資料型別時括號不可省略。

由此可見,sizeof並不是一個函式,sizeof是一個運算子。

sizeof與strlen的區別總結為以下幾點:

序號

sizeof

strlen

   1

運算子

函式

 2

測量陣列時,測量值為編譯器為該陣列分配的空間的大小

返回值為陣列中字元的個數

,遇到’\0’截止,不包括’\0’

   3

可以測量變數所佔的記憶體空間大小,以及資料型別的大小,測量單位為位元組

只能測量字串的長度,且結尾必須為’\0’



相關推薦

linux csizeofstrlen區別簡述_學習筆記_008

通過一個簡單的程式來了解sizeof和strlen的用法,以及和二者的區別。#include <stdio.h> #include <string.h> void size(

PHPSizeofStrlen區別聯…

9.陣列作為引數傳給函式時傳的是指標而不是陣列,傳遞的是陣列的首地址, 如: fun(char [8]) fun(char []) 都等價於 fun(char *) 在C++裡引數傳遞陣列永遠都是傳遞指向陣列首元素的指標,編譯器不知道陣列的大小 如果想在函式內知道陣列的大小, 需要這樣做: 進入函式後用me

C語言中sizeofstrlen區別

由於 def sizeof 繼續 數組 color 例如 結束 自動添加 sizeof 初始的分配的空間大小,期中 sizeof(unsigned char) = 1; sizeof(signed char) = 1;        sizeof(int) = 4; siz

Objective-C結構體的區別

只能在類裡面寫方法,不能在結構體裡面寫方法類——物件,結構體——值類——引用型別 位於棧上的指標(引用)位於堆上的實體物件結構體——值型別 例項直接位於棧中拷貝行為: classname *a = b

linux c簡單UDP應用,資料傳送接收

主要函式: 接收recvfrom()     ssize_t recvfrom (int sockfd, void *buf, size_t len, int flags, stru

CC99C89區別以及轉換方法

DATE: 2018.11.14 1、 C99與C89區別: 可變長陣列   C99中,程式設計師宣告陣列時,陣列的維數可以由任一有效的整型表示式確定,包括只在執行時才能確定其值的表示式,這類陣列就叫做可變長陣列,但是隻有區域性陣列才可以是變長的. 可變長陣

tomcatLinux環境安裝啟動

log 下載 linux環境 測試 $path rtu apache startup pro 一、安裝 1、下載tomcat安裝包 2、解壓安裝包 3、配置環境變量 打開~/.bash_profile文件,輸入一下兩句話: export TOMCAT_HOME=/User

linux csetsockopt 詳解

多層 count 設置 例如 select() log struct rec 查找 轉自:http://blog.csdn.net/zhonglinzhang/article/details/9183229 功能描述: 獲取或者設置與某個套接字關聯的選

Linux c字串的擷取

對字串的擷取: #include <stdio.h> #include <string.h> //截斷有特殊符號的字串,並取後段 void cutString_A(char* string) { char *p_start = string

字串處理中sizeofstrlen區別,以及末尾的\0

char *ch = "wonima aisaoziaaa"; int n = sizeof(ch); // 指標長度,對於64平臺來說,值為8 int nn = sizeof(*ch); // 一個字元的長度,值為1 int nnn = strlen(ch); //

Linux c大型專案的除錯技巧

巧妙利用列印資訊: 直接在函式裡面呼叫void print_trace(),就可以找到呼叫它的函式的層級關係 printf("!!!!!%s,%s,%d\n", __FILE__,__FUNCTION__, __LINE__); printf("!!!!!test->

linux CC語言中常用的幾個函式的總結

1、memset函式 定義變數時一定要進行初始化,尤其是陣列和結構體這種佔用記憶體大的資料結構。在使用陣列的時候經常因為沒有初始化而產生“燙燙燙燙燙燙”這樣的野值,俗稱“亂碼”。每種型別的變數都有各自的初始化方法,memset() 函式可以說是初始化記憶體的“萬能函式”,通常為新申請的記憶體進行初始化工作。

linux CC語言中常用的幾個函數的總結

有效 getchar() 調用 指向 ++ 再次 無法 linux c 收回 1、memset函數 定義變量時一定要進行初始化,尤其是數組和結構體這種占用內存大的數據結構。在使用數組的時候經常因為沒有初始化而產生“燙燙燙燙燙燙”這樣的野值,俗稱“亂碼”。每種類型的變量都有各

linux CC語言中常用的幾個函式的總結

3、fgets 雖然用 gets() 時有空格也可以直接輸入,但是 gets() 有一個非常大的缺陷,即它不檢查預留儲存區是否能夠容納實際輸入的資料,換句話說,如果輸入的字元數目大於陣列的長度,gets 無法檢測到這個問題,就會發生記憶體越界,所以程式設計時建議使用 fgets()。fgets() 的原型為

Effective C++設計宣告

文章目錄 一、讓介面容易被正確使用,不易被誤用 1、引入新型別預防“介面被誤用” 2、限制類型內什麼事可做,什麼事不可做 3、請記住 二、設計class猶如設計type 1、設計

sizeofstrlen區別及用法

1、sizeof的定義--本身是操作符不是函式         1.1、你可以把操作符理解為內建的,最基礎的函式,它們無法完全被若干個未使用同類型操作符的函式所替代。比如加法運算子,你就不可能寫出一個不用+或-的函式來實現任何情況下的加法功能。         1.2、運

linux c一維至多維陣列名的的含義及其取地址的含義_學習筆記_011

1.一維陣列的陣列名 int a[3]; a:指標常量,儲存的是一維陣列首元素的地址; &a:對一維陣列的陣列名取地址,表示一維陣列的地址; *(&a):對一維陣列的地址取值等於陣列首元素的地址。 2.二維陣列的陣列名 int a[2][2]; *(*(

網路socket程式設計linux/C

知識點總結: 1、int socket(int family,int type,int protocol) family: 指定使用的協議簇:AF_INET(IPv4) AF_INET6(IPv6) AF_LOCAL(UNIX協議) AF_ROUTE(路由套接字) AF_KEY(祕鑰

linux c什麼是野指標以及如何避免野指標_學習筆記_010

1.首先以一個示例來認識野指標: #include <stdio.h> int main() { int * p; scanf("%d", p); print

前端佈局pxrpx的簡述

本文只以移動裝置為例說明。 注意:設計師以iphone6為標準出設計稿的話,1rpx=0.5px=1物理畫素。Photoshop裡面量出來的尺寸為物理畫素點。所以可以直接使用標註尺寸資料。 【畫素Pixel】畫素是影象的基本取樣單位,它不是一個確定的物理量,因為畫素點的物理大小是不確定的。如圖: