1. 程式人生 > 實用技巧 >C/C++字元陣列、字串、字串指標、字串指標陣列(一維陣列)

C/C++字元陣列、字串、字串指標、字串指標陣列(一維陣列)

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