【C】 30_C語言中的字串

TianSong發表於2019-05-11

字串的概念

  • 字串是有序字元的集合
  • 字串是程式中的基本元素之一
  • 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 語言張的字串使用 ` ` 作為結束符
  • 字串字面量的本質為字元陣列
  • 字串相關函式都依賴於結束符 ` `

以上內容參考狄泰軟體學院系列課程,請大家保護原創!

相關文章