1. 程式人生 > 其它 >C 中的字元陣列

C 中的字元陣列

在C語言中沒有專門的字串變數,字串實際上是使用 null 字元 \0 終止的一維字元陣列。因此,一個以 null 結尾的字串,包含了組成字串的字元。通常用一個字元陣列來存放一個字串。

字串總是以 \0 作為串的結束符。因此當把一個字串存入一個數組時,也把結束符 \0存入陣列,並以此作為該字串是否結束的標誌。有了\0標誌後,就不必再用字元陣列的長度來判斷字串的長度了。

\0就是字串結束標誌。

char a[10]={'1','2','3','4','5','6','7','8','9','\0'};

其實,不需要把 null 字元放在字串常量的末尾。C 編譯器會在初始化陣列時,自動把 \0 放在字串的末尾。

字串相關函式

函式 用途
strcpy(s1, s2); 複製字串 s2 到字串 s1。
strcat(s1, s2); 連線字串 s2 到字串 s1 的末尾。
strlen(s1); 返回字串 s1 的長度。不包括結束符.
strcmp(s1, s2); 如果 s1 和 s2 是相同的,則返回 0;如果 s1<s2 則返回小於 0;如果 s1>s2 則返回大於 0。
strchr(s1, ch); 返回一個指標,指向字串 s1 中字元 ch 的第一次出現的位置。
strstr(s1, s2); 返回一個指標,指向字串 s1 中字串 s2 的第一次出現的位置。
#include <stdio.h>
#include <string.h>
 
int main ()
{
   char str1[12] = "Hello";
   char str2[12] = "World";
   char str3[12];
   int  len ;
 
   /* 複製 str1 到 str3 */
   strcpy(str3, str1);
   printf("strcpy( str3, str1) :  %s\n", str3 );
 
   /* 連線 str1 和 str2 */
   strcat( str1, str2);
   printf("strcat( str1, str2):   %s\n", str1 );
 
   /* 連線後,str1 的總長度 */
   len = strlen(str1);
   printf("strlen(str1) :  %d\n", len );
 
   return 0;
}
int main() {
    char file_name[] = {"test.txt"};
    char content[] = {"i am a teacher"};
    ofstream(file_name) << content << 2 << endl;
    FILE *file = fopen(file_name, "r");
    size_t len = strlen(content);
    cout << "len:" << len << endl;
    size_t size = sizeof content;
    cout << "size:" << size << endl;
    vector<char> buf(size);
    std::fread(&buf[0], sizeof buf[0], buf.size(), file);
    for (char n : buf)
        std::cout << n;

    return 0;
}

字串與字元陣列

  • 通常用一個字元陣列來存放字串
  • 字串總以 \0作為串的結束,因此當把一個字串存入一個字元陣列時,也把結束符存入陣列, 並以此作為字串的結束標誌.
  • 有了結束標誌,就不必再用字元陣列的長度來判斷字串的長度了.有系統自動處理.

定義字元陣列

  • 譚浩強 C語言第四版---p98
char c[]={'c', ' ','p','r','o','g','r','a','m'};

C語言允許用字串的方式對陣列作初始化賦值,可寫為:

char c[]={"C program"};

或去掉{}寫為:

char c[]="C program";

用字串方式賦值比用字元逐個賦值要多佔一個位元組, 用於存放字串結束標誌 \0

C p r o g r a m \0