回覆列表
-
1 # 周林ZhouLin
-
2 # 科技幽默生活
\0是字串的結束標誌。C語言陣列,字串這些在記憶體中是順序儲存的,就是一個接一個的按順序儲存。
那麼用指標列印或者做其他處理的時候,如果不知道字串的長度就讀記憶體,就可能超出記憶體範圍。讀到亂碼,或者段錯誤。
-
3 # 瓶凡科技營
一、C語言跳脫字元
在C語言語法規範中有一些字元是無法直接顯示出來的,比如有一些ASCII碼,語言藉助跳脫字元,才能讓編譯器知道,程式中所要表達的是哪個符號。而"\0"就是代表的“空”字元,遇到這個,編譯器就認為是空的,無輸出。
二、關於C陣列
C語言中陣列作為一種變數型別,其儲存是線性的,順序的。比如題主所說的s[ ]這個陣列,記憶體中存放序列就是s[0]、s[1]…s[j]、s[j+1]…s[N-1],而這個N就是陣列定義時的長度,也就是元素的個數。
三、C語言字串操作
很多時候,我們C語言中要處理字串操作,因為C是一個相對接近硬體的語言,不像其他語言比如JAVA、C#或者Python那樣,一個String型別就定義了一個字串。而經常依靠一個數組,比如常見的:
char *String[ ] = “hello world”;這樣的定義。
或者題主所說的s[ ]應該也是一個char型的陣列。
好處是C語言提供了一些基礎的操作字串的庫函式,比如:strlen()可以計算長度 strcat()可以追加等。
我們最常見的printf(“%s”,s);也可以將整個s陣列中存放的字串打印出來。
重點來了:
所有的這些字串操作都有一個限制,就是字串的末尾需要有一個結束標識,就是空字元"\0",要不然呼叫的C庫函式無法判決一個字串在哪裡結束,所以s[j]就是將s[ ]陣列j+1個元素賦值為空字元,表示字串到此結束。
"\0"是轉譯字元,意思是告訴程式,這不是字元0,是2進位制0直接放進來;在C語言中沒有專門的字串變數,通常用一個字元陣列來存放一個字串。字串總是以"\0"作為串的結束符;當把一個字串存入一個數組時,也把結束符 "\0"存入陣列,並以此作為該字串是否結束的標誌。有了"\0"標誌後,就不必再用字元陣列的長度來判斷字串的長度了。