字串和字元陣列的區別以及sizeof和strlen的區別
sizeof是運算子,其值在編譯時即計算好了,引數可以是陣列、指標、型別、物件、函式等。它的功能是:獲得保證能容納實現所建立的最大物件的位元組大小。
由於在編譯時計算,因此sizeof不能用來返回動態分配的記憶體空間的大小。實際上,用sizeof來返回型別以及靜態分配的物件、結構或陣列所佔的空間,返回值跟物件、結構、陣列所儲存的內容沒有關係。
具體而言,當引數分別如下時,sizeof返回的值表示的含義如下:
陣列——編譯時分配的陣列空間大小;
指標——儲存該指標所用的空間大小(儲存該指標的地址的長度,是長整型,應該為4);
型別——該型別所佔的空間大小;
物件——物件的實際佔用空間大小;
函式——函式的返回型別所佔的空間大小。函式的返回型別不能是void。
二、strlen
strlen()是函式,要在執行時才能計算。引數必須是字元型指標(char*)。當陣列名作為引數傳入時,實際上陣列就退化成指標了。
它的功能是:返回字串的長度。該字串可能是自己定義的,也可能是記憶體中隨機的,該函式實際完成的功能是從代表該字串的第一個地址開始遍歷,直到遇到結束符NULL。返回的長度大小不包括NULL。
相關推薦
字串和字元陣列的區別以及sizeof和strlen的區別
一、sizeof sizeof是運算子,其值在編譯時即計算好了,引數可以是陣列、指標、型別、物件、函式等。它的功能是:獲得保證能容納實現所建立的最大物件的位元組大小。 由於在編譯時計算,因此sizeof不能用來返回動態分配的記憶體空間的大小。實際上,用sizeof來返回型別以及靜態分配的物件、
字串常量儲存在字元指標和字元陣列的區別
C語言中字串常量的儲存方式有兩種:字元指標和字元陣列中。 就我目前所能理解到的程度,這兩種方式的區別如下: 字元指標: char *m = “February”; 可以寫成: char *m; m = “February”; 字元陣列: char s[] = {
【字串】字元陣列和字串區別詳解
C 語言中並不存在字串這個資料型別,而是使用字元陣列來儲存字串。那麼,字元陣列就一定是字串嗎? 對於這個問題,大多教科書中的回答是“是”。其實不然,字元陣列和字串是完全不相同的兩個概念,千萬不要混淆。分析如下所示的示例程式碼。 1 #include <stdio.h> 2 #incl
指標與陣列 字元指標,字串和字元陣列的區別
指標和陣列是不相等的,把一個數組名作為一個引數傳遞給函式時陣列名就是指向第一個元素的指標, 在大多數表示式中陣列名的值是指向第一個元素的指標(有兩個例外,一個是sizeof返回的是整個陣列 的位元組數
C中常量字串和字元陣列的區別
1、 常量字串 在程式碼裡直接出現的”abcdef”這種字串,在程式執行的時候,系統會將它們放在常量區,所謂常量區就是一直存在的,只讀的,不可更改的資料區域,並且一個字串只會有一份。假設你在程式裡有兩行程式碼 char* p1 = “agcd”; char* p2 = “a
使用字串指標變數和字元陣列的區別
4、對使用字元指標變數和字元陣列兩種方法表示字串的討論雖然用字元陣列和字元指標變數都能實現字串的儲存和運算,但它們二者之間是有區別的,不應混為一談。 4.1、字元陣列由若干個元素組成,每個元素放一個字元;而字元指標變數中存放的是地址(字串/字元陣列的首地址),絕不是將字串放到字元指標變數中(是字串首地址) 4
C語言字串和字元陣列
如果是字元陣列,也可以用一個字串字面值來初始化: char str[10] = "Hello"; 相當於: char str[10] = { 'H', 'e', 'l', 'l', 'o', '\0' }; str的後四個元素沒有指定,自動初始化為0,即Null字元。
matlab裡cell和char,字串與字元陣列(zz)
用importdata和textscan讀取內容為字串的txt,結果為cell型元胞組。 我想把cell變成char型,然後就自然地想到cell2str,遺憾的是matlab中沒有這個函式。 就像沒有str2cell一樣。 實現str2cell功能的函式是cel
結構體的大小以及sizeof()和strlen()的區別
一: sizeof運算子,可用於任何變數名,型別名或常量值,當用於用於變數名(不是陣列名)或常量時,它不需要圓括號。它在編譯時起作用,而不是執行時。 PS: 求結構體的sizeof()大小有兩個規則(記憶體對齊): 1.:上一個變數是下一個變數的整數倍。 2.:
matlab裡cell和char,字串與字元陣列
很多人分不開字元陣列和字串什麼區別。 >>str1='i love matlab' % 這是一個字元陣列,也是一個字串 str1 = i love matlab >>str2=['I ';'am ';'a ';'boy'];% 這是字元陣列,由於是陣列,所以每一行必須具有相同的列數(字
字串常量和字元陣列的區分
首先我們來看個程式,這個程式說的是字串函式strcat()函式的實現: #include<stdlib.h> #include<assert.h> #include<stdio.h> #define MAX 20 char
C語言中的字串和字元陣列
本文來源於網路,轉載為是了更好的複習! 原文網址 :點這裡 1、字元陣列的定義與初始化 字元陣列的初始化,最容易理解的方式就是逐個字元賦給陣列中各元素。 char str[10]={ 'I',' ','a','m',' ',‘h','a','p','p','y'}; 即把1
C語言中,利用巨集定義一個字串和字元陣列定義的字串其末尾都會自動新增\0字元
#include <stdio.h> #define MYPHONE "AT+CMGS" unsigned char SMS[]="HELLO, WELCOME TO RCCTS!"; unsigned char *String; unsigned char i=0; void main() {
C++指標和陣列:字元和字串、字元陣列
1、字串是一種重要的資料型別,但是c語言並沒有顯示的字串資料型別,因為字串以字串常量的形式出現或者儲存於字元陣列中。 2、在C++標準模板庫(STL)中提供了string類,實現了對字串的封裝。但是其
C-sizeof和strlen區別,以及sizeof如何計算結構體大小
struct alt inf 編譯 style img com 大小 運行 sizeof和strlen區別 sizeof是關鍵字,在編譯時就能計算出值,可以計算任何類型 strlen是函數,只有在運行時才能去計算,且只能計算字符型的. 對於數組時,strlen
普通集合和泛型集合的區別,哈希表和字典表的區別,隊列和堆棧的區別以及堆和棧的區別。
ear 釋放內存 main 廣泛 棧內存 節點 except {0} 常數 普通集合和泛型集合的區別: 泛型集合與傳統集合相比 類型更安全. 泛型集合無需裝箱拆箱操作. 泛型的重要性. 泛型是未來五年的主流技術 ...通常情況下,建議您使用泛型集合,因為這樣可以獲得類型安全
為什麼重定向是響應,轉發和包含是請求,以及他們之間的區別
總結一: 重定向:是伺服器對客戶端做出的響應,讓客戶端重新請求request面 轉 發:轉發是伺服器去自己去請求新的頁面,而不做出響應,做出響應應該是新頁面的事情 總結二 什麼時候用重定向(sendRedirect),什麼時候用轉發(forward),什麼時候用包含(inc
display和visibility的區別以及迴流和重繪
display:none會脫離文件流,不佔據頁面空間; visibility:hidden,只是隱藏內容,並沒有脫離文件流,會佔據頁面的空間。 講述迴流以及重繪之前需要先了解頁面在文件載入完成之後到完全顯示中間的過程: 1.根據文件生成DOM樹(包括display:none的節點) 2.在D
c++中string類物件和字元陣列之間的相互轉換
string類在c++中是一個模板類,位於名字空間std中,注意這裡不是string.h,string.h是C字串標頭檔案。 將string型別轉換為字元陣列char arr[10];string s("ABCDEFG");int len = s.copy(arr,&nb
指標系統學習5-對使用字元指標變數和字元陣列的討論
雖然用字元陣列和字元指標變數都能實現字串的儲存和運算,但它們二者之間是有區別的,不應混為一談……主要概括起來有以下幾點:1. 字元陣列由若干個元素組成,每個元素中 放一個字元,而字元指標變數中存放的是地址(字串第1個字元的地址),決不是將字串放到字元指標變數中。 2. 賦值方式。對字元陣列只能對