字串的概念
- 字串是有序字元的集合
- 字串是程式中的基本元素之一
C 語言中沒有字串的概念
- C 語言中通過特殊的字元陣列模擬字串
- C 語言中的字串是以 ` ` 結尾的字元陣列
字串與字元陣列
在 C 語言中,雙引號引用的單個或多個字元是一種特殊的字面量-字串字面量
- 儲存在程式的全域性只讀儲存區
- 本質為字元陣列,編譯器自動在結尾加上 ` ` 字元
下面哪些是字串的定義
char ca[] = {`H`, `e`, `l`, `l`, `o`}; // 字元陣列
char sa[] = {`W`, `o`, `r`, `l`, `d`, ` `}; // 字串
char ss[] = "Hello word!"; // 字串,字串字面量初始化字元出陣列
char* str = "Hello word!"; // 字串
例項分析: 字元陣列與字元陣列
#include <stdio.h>
int main()
{
char ca[] = {`H`, `e`, `l`, `l`, `o`};
char sa[] = {`W`, `o`, `r`, `l`, `d`, ` `};
char ss[] = "Hello word!";
char* str = "Hello word!";
printf("%s
", ca);
printf("%s
", sa);
printf("%s
", ss);
printf("%s
", str);
return 0;
}
輸出:
Hello��Hello word!
World
Hello word!
Hello word!
你知道嗎?
- 字串字面量的本質是一個陣列
- 字串字面量可以看作常量指標
- 字串字面量中的字元不可改變
- 字串字面量至少包含一個字元(` `,空字串)
字串字面量
- “Hello word!” 是一個“無名的字元陣列”
下面的表示式正確嗎?
char b = "abc"[0];
char c = *("123" + 1);
char t = *"";
例項分析: 字串字面量的本質
#include <stdio.h>
int main()
{
char b = "abc"[0];
char c = *("123" + 1);
char t = *"";
printf("%c
", b);
printf("%c
", c);
printf("%d
", t);
printf("%s
", "Hello");
printf("%p
", "word");
printf("----
");
printf(""abc" = %p
", "abc");
printf("&"abc" = %p
", &"abc");
printf(""abc" + 1 = %p
", "abc" + 1); // 注意列印輸出
printf("&"abc" + 1 = %p
", &"abc" + 1); // 注意列印輸出
return 0;
}
輸出:
a
2
0
Hello
0x80485b6
----
"abc" = 0x80485cc
&"abc" = 0x80485cc
"abc" + 1 = 0x80485cd
&"abc" + 1 = 0x80485d0
分析:
字串的本質為字元陣列,當定義一個字串時,返回字串首元素的地址,而不是字串地址。
"abc" = 0x80485cc
&"abc" = 0x80485cc
"abc" + 1 = 0x80485cd
&"abc" + 1 = 0x80485d0
0x80485cd - 0x80485cc = 1 byte
0x80485d0 - 0x80485cc = 4 byte (3 + 1(` `))
字串的長度
- 字串的長度就是字串所包含的字元個數
- 字串長度指的是第一個 ` ` 字元前出現的字元個數
- 通過 ` ` 結束符來確定字串的長度
- 函式 strlen 用於返回字串的長度
char s[] = "Hello";
printf("%d
", strlen(s));
printf("%d
", strlen("123"));
程式設計實驗: strlen 的使用
#include <stdio.h>
#include <string.h>
int main()
{
char s[] = "Hello world";
int i = 0;
for(i=0; i<sizeof(s)/sizeof(char); i++)
{
printf("%c
", s[i]);
}
printf("%s
", s);
printf("%d
", strlen(s));
printf("%d
", strlen("123"));
return 0;
}
輸出:
H
e
l
l
o
w
o
r
l
d
Hello
5
3
小結
- C 語言中通過字元陣列模擬字串
- C 語言張的字串使用 ` ` 作為結束符
- 字串字面量的本質為字元陣列
- 字串相關函式都依賴於結束符 ` `
以上內容參考狄泰軟體學院系列課程,請大家保護原創!