'\0'是轉譯字元,意思是告訴編譯器,這不是字元0,而是空字元。空字元\0對應的二進位制為00000000,而數字0為00110000
原來,在c語言中沒有專門的字串變數,通常用乙個字元陣列來存放乙個字串。字串總是以'\0'作為串的結束符。因此當把乙個字串存入乙個陣列時,也把結束符 '\0'存入陣列,並以此作為該字串是否結束的標誌。有了'\0'標誌後,就不必再用字元陣列的長度來判斷字串的長度了。
『\0』:即空字元,在c語言中,字元是按其所對應的ascii碼來儲存的,乙個字元佔乙個位元組。ascii碼表如下:
bin(二進位制)
oct(八進位制)
dec(十進位制)
hex(十六進製制)
縮寫/字元
解釋0000 0000
0x00
nul(null)
空字元
字串結束標誌為『\0』(1)、char str="12345";判斷乙個字串是否結束的標誌就是看是否遇到『\0』,如果遇到『\0』,則表示字串結束。
或給字串加上大括號:char str=;
或 char str[6]="12345"
這種方法定義時,系統會自動在字串的末尾加上字串結束符,即 『\0』,
(2)、char str[10]=;
這種方法定義時,系統會自動從未初始化的元素開始,將之後的元素賦為\0,如上面的陣列str中的元素實際上是:'1','2','3','4','5','\0','\0','\0','\0','\0'
(3)、char str=;
這種方法定義時,系統不會自動在字串的末尾加上字串結束符;
此時用sizeof()函式可以正確求出其所佔的記憶體大小;但用strlen()函式不能正確求出其長度,因為strlen是通過\0判斷字串結束的。
所以,採用該方法定義時,一般人為地加上\0,即char str=;
既:
char str=;**示例:char str[6]=; //故意給陣列預留乙個空位
char str=;
#include #include using namespace std;
int main()
; const char *str3 = "12345";
char str4 = ;
char str5 = ;
printf("%d,%d,%d,%d,%d,%d\n", str2[5], str2[6], str2[7], str2[8], str2[9], str3[4]);
printf("各個字串為:%s,%s,%s,%s,%s\n", str1, str2, str3, str4, str5);
printf("各個字串的所佔的記憶體大小為:%d,%d,%d,%d,%d\n", sizeof(str1), sizeof(str2), sizeof(str3), sizeof(str4), sizeof(str5));
printf("各個字串的有效長度為:%d,%d,%d,%d,%d\n", strlen(str1), strlen(str2), strlen(str3), strlen(str4), strlen(str5));
printf("%d\n", strcmp(str1, str3));
printf("%d\n", strcmp(str1, str5));
return 0;
}
執行結果:
只能採用字串的方式初始化:char *str3="12345";
注意:字元指標可以用字串常量初始化和賦值;
即:char *str3;str3="12345";也是可以的
此時也可以用str3[4]的形式訪問其中的元素,如cout<< str3[4];就會輸出str指向的字串的第四個元素。
該方法也是自動加上了字串結束符的。
字串結束符'\0' -何時自動加- 字串定義方法
c語言中字串結束符'\0'
答案是:會自動新增『\0』,用程式進行驗證:#include #define myphone "at+cmgs"
unsigned char sms = "hello, welcome to rccts!";
unsigned char *string;
unsigned char i = 0;
void main()
if (*string == '\0')
else
printf("\n");
printf("myphone=%s\n", &myphone); //列印字串 這裡%s的s必須為小寫
/**************驗證sms字串末尾是否有\0字元****************/
string = sms;
while (*string) //當*string所指向的字元等於\0時跳出迴圈
if (*string == '\0')
else
printf("\nsms=%s\n", &sms); //列印字串 這裡%s的s必須為小寫
}
執行結果:
C語言字串末尾空字元記錄
c語言中字串的儲存方式記錄 一直以來,對於c中的字串儲存的形式模模糊糊的,所以經常會有越界的錯誤發生,這幾天靜下心來,看了看基本c的參考書,現在記錄一下對於字串的儲存,方便自己以後回顧。例 char test 10 scanf s char 這種情況下,如果輸入1234567890就會出錯了,為什麼...
字串中的數字末尾拼接指定的字元
我在給醫院做專案,醫生要求數字末尾都拼接單位,比如 4 9 5mm 8999 3 4 9 2 這一串文字中的數字末尾都拼接乙個單位,變成 4 9 5 mm 8999 3 4 9 2 我的 如下圖所示 片段 數字末尾拼接 符號 int lastendindex 0 matcher matcher pa...
C語言中定義字串的幾種方式
所謂字串本質上就是以 0作為 結尾的特殊字元陣列 由於字串本質上其實就是以 0作為 結尾的特殊字元陣列,所以定義字串時,必須保證字串儲存的最後乙個元素為 0 當我們沒有給定字串具體長度時,我們通過這種方式 char 字串名稱 來定義字串時,就需要手 動的在字串末尾加上 0 不然的話,它就僅僅是乙個字...