C 中的字元陣列
阿新 • • 發佈:2022-03-26
在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 |
---|