一、char類型數組和null字元 字元串都是被存儲在char類型數組裡面,字元被存儲在相鄰的存儲單元中,每個單元存儲一個字元。 每個字元串末尾會有一個\0,這就是空字元串,C語言用它來標記字元串結束,空字元串不是數字0,他是非列印字元,其ASCII碼是0。 數組定義:同類型的數據元素的有序序列。 ...
一、char類型數組和null字元
- 字元串都是被存儲在char類型數組裡面,字元被存儲在相鄰的存儲單元中,每個單元存儲一個字元。
- 每個字元串末尾會有一個
\0
,這就是空字元串,C語言用它來標記字元串結束,空字元串不是數字0,他是非列印字元,其ASCII碼是0。 - 數組定義:同類型的數據元素的有序序列。
1.使用字元串
#include<stdio.h>
#define PARISE "You are an extraordinary being"
#pragma warning(disable:4996)
int D16_1_praisel(void) {
char name[40];
printf("What's your name?");
scanf("%s", name);
printf("Hello,%s. %s\n", name, PARISE);
return 0;
}
運行顯示:
- 編譯器會自動給字元串的末尾添加空字元
\0
註意點:我們在進行輸入名字的時候是兩個單詞的時候,比如:Lebron James,那麼
scanf()
會讀取空格之前的第一個單詞,不會讀取後面的單詞,也可以使用方法fgets()
後面再介紹。
2.strlen()函數
sizeof
運算符,它以位元組為單給出對象的大小。strlen()
函數給出字元串中的字元長度。因為1位元組存儲一個字元二者結果可能相同,但本質並不是一種計算方式。
#include<stdio.h>
#include<string.h> /*提供strlen()函數的原型*/
#define PRAISE "You are an extraordinaty being."
#pragma warning(disable:4996)
int D16_2_praise2(void) {
char name[40];
printf("What's your name?");
scanf("%s", name);
printf("Hello,%s.%s\n", name, PRAISE);
printf("Your name of %zd letters occupies %zd memory cells.\n", strlen(name), sizeof(name));
printf("The phrase of praise has %zd letters ", strlen(PRAISE));
printf("and occupise %zd memory cells.\n", sizeof PRAISE);
return 0;
}
運行顯示:
註意點:
(1)如果使用ANSI C之前的編譯器,必須要移除這一行:#include<string.h>;之前的編譯器使用的是strings.h這個頭文件;
(2)C99和C11標準專門為sizeof運算符的返回類型特地添加了%zd
轉換說明,對於函數strlen()
也同樣適用。早期的C需要使用實際的返回類型(通常是unsigned或unsigned long)
(3)sizeof後面接括弧的問題,如果是變數或者字面量,括弧可有可無;如果是類型則需要括弧,這裡推薦都使用括弧為好。
二、源碼:
- D16_1_praisel.c
- D16_2_praise2.c
- https://github.com/ruigege66/CPrimerPlus/blob/master/D16_1_praisel.c
- https://github.com/ruigege66/CPrimerPlus/blob/master/D16_2_praise2.c
- CSDN:https://blog.csdn.net/weixin_44630050
- 博客園:https://www.cnblogs.com/ruigege0000/
- 歡迎關註微信公眾號:傅里葉變換,個人賬號,僅用於技術交流