c風格字串與c風格字串陣列

2021-07-24 10:50:16 字數 1638 閱讀 2355

#include#includeusing namespace std;

int main()

//輸出結果

//0034ff10 0034ff10

//0034ff04 013bdc80

//char *str = "abcd";//先在文字常量區為"abcd"常量分配5b,接著在棧裡為指標str分配4b,並接收"abcd"字串的首位址

//char str = "abcd";//在棧區分配連續的5b,內容為'a','b','c','d',並把首位址標記為str

char*a = "123";//此時"123"在常量儲存區,a指向的記憶體的內容不能改變

cout << a << endl;

a = new char[5];//與char陣列不同的是,char*a可以指向別的記憶體,這裡的a現在指向堆區的記憶體了

strcpy(a, "456");//此時char*a的內容在堆中,a指向的記憶體的內容可以改變

//a = "456";//這裡是錯誤的賦值方法,使得a指向了常量儲存區(使得上面的new變得無效了),這裡只是給a賦值,應該用strcpy(a,"456")

cout << a << endl;

//給char*變數賦值的兩種方式:

//1、第一種

char* a1 = null;

a1 = "abc";

cout << a1 << endl;

//2、第二種

char*a2 = null;

char b[10] = "def";//b指向的記憶體的內容可以改變,但b不能指向別的記憶體

a2 = b;

cout << a2 << endl;

sizeof(a2);//值為4,表示指標a所佔的位元組

strlen(a2) + 1;//表示a所指內容所佔的位元組數

//char*接收控制台輸入的字串時,先要動態分配記憶體

char*a = null;

a = new char[5];

cin >> a;//如果輸入了超過4個字元,則屬於記憶體越界,但編譯器不會報錯

cout << a << endl;

char b[5];

cin >> b;//如果輸入了超過4個字元,則屬於記憶體越界,編譯器會報錯

cout << b << endl;

//關於b[5],呼叫的是templateoperator>>(t array[size])

//size在編譯期間已經是乙個確定的數值了。所以會進行錯誤檢測

//而char *a,呼叫的templateoperator>>(t*) 兩個函式根本不同

char *q = "hello";

const char* p = "hello";

char *p1= (char*)p;//const char*不能初始化char*,所以這裡需要強制型別轉換

char *const t = q; //這裡t是常量指標,定義的時候必須初始化,不能作為左值(不能被修改)

const char *const t2 = p;//t2也是常量指標,而且指向的字串不能被修改

C風格字串與C 風格字串

c風格字串 對字串進行操作的 c 函式定義在標頭檔案中 1.字串定義 char result 2.字串的最後乙個字元是null字元 0 可以通過這個字元確定字串的結尾。3.strlen 返回的是字串的大小 因此,分配空間的時候,需要比字串的實際空間大1.e.g.char copystring con...

C風格字串與C 風格字串

c風格字串 對字串進行操作的 c 函式定義在標頭檔案中 1.字串定義 char result 2.字串的最後乙個字元是null字元 0 可以通過這個字元確定字串的結尾。3.strlen 返回的是字串的大小 因此,分配空間的時候,需要比字串的實際空間大1.e.g.char copystring con...

C風格字串 字元陣列

char ch cout sizeof ch sizeof char endl 字元陣列元素個數 cout size ch endl 陣列長度 cout strlen ch endl 字元陣列元素個數,需在字元陣列後加 0 strlen 是c風格字串有的函式,返回字元陣列的長度,需要在字元陣列後加 ...