1.在c 語言中,將字符串作為字符數組來處理,即字符數組<==>字符串。
2.首先,不論是局部,靜態還是全局數組都必須在定義的時候初始化,否則就得通過其他方式,eg 循環操作,字符串處理函數strcpy()
下面通過在VS2019中運行程序來體現:
#include <iostream> using namespace std; int main() { int i1, i2; cout << "**********字符數組-字符串**********\n\n"; char a01[6]={ 'h','e','l','l','o' }; char a01a[6] = "hello"; i1 = sizeof(a01); //靜態初始化字符數組長度時,要大於等於字符元素個數加一 //如果定義的長度剛好等於字符個數時,逐個字符賦值情形下會輸出亂碼,定義的長度增加后系統自動在末尾(未被賦值的空間)填充'\0'這樣輸出就不會亂碼; //如果定義的長度剛好等於字符個數時,直接賦值一個字符串情形會報錯 printf("a01的長度=%d\n", i1); printf("方法一:聲明並靜態初始化(逐個字符賦值) a01 = %s\n",a01); printf("方法一:聲明並靜態初始化(直接賦值一個字符串)a01a = %s\n", a01a); cout << '\n'; char a02[] = { 'h','e','l','l','o','\0'};//動態初始化且逐個字符賦值時在末尾必須加'\0'字符,否則會輸出亂碼。 printf("方法二:聲明並動態初始化(逐個字符賦值)a02 = %s\n", a02); char a02a[] = "hello";//動態初始化且直接賦值一個字符串時在字符串末尾由系統自動加上一個'\0' i2 = sizeof(a01); //動態初始化未指定字符數組長度時,逐個字符賦值的字符數組長度要算上末尾的'0' //動態初始化未指定字符數組長度時,直接賦值一個字符串由於系統自動在末尾加上一個'\0',所以也要計算在內 printf("a02的長度=%d\n", i2); printf("方法二:聲明並動態初始化(直接賦值一個字符串)a02a = %s\n", a02a); cout << '\n'; cout << "**********字符串指針-字符串**********\n\n";//不適用於C++環境,需要修改項目-屬性-C/C++-語言-符合模式-修改為“否”,才不會報錯 char *a03= "hello"; printf("使用字符串指針聲明並初始化一個字符串 a03 = %s\n", a03); char *a04; a04 = "hello"; printf("使用字符串指針先聲明后初始化一個字符串 a04 = %s\n", a04); cout << '\n'; cout << "********** 字符串指針數組 **********\n\n"; cout << "方法一:聲明+定義\n"; char *a05[5] = { "hello","nihao","good","ok","bye" };//方法一:聲明+定義。長度5可以不指定 int i = 0; for (i = 0; i < 5; i++) printf("a05[%d] = %s ,", i, a05[i]);//字符串數組的輸出方式 cout << "\n方法二:先聲明后逐個定義字符串\n"; char* a06[5];//方法二:先聲明,再逐個定義,此時字符串指針數組長度5不能省略,必須指定。 a06[0] = "hello"; a06[1] = "nihao"; a06[2] = "good"; a06[3] = "ok"; a06[4] = "bye"; for (i = 0; i < 5; i++) printf("a06[%d] = %s , ", i, a06[i]); cout << "\nThis is my first C++ program"; return 0; }
注意:不能使用下面的賦值方式:
情形一:
char str[20];
str = "I am happy";
情形二:
char str[];//單獨聲明時必須指定長度
str[0]='a';
Done