C語言字串及指向字元陣列的指標

2021-10-07 09:15:37 字數 2785 閱讀 9707

通常編譯器在「肉眼所能看見的」字元陣列末尾還會加乙個「\0」作為結束符

所以真正的字元長度是「肉眼所見長度」+1

char str[5]

="hello"

;

如上**是會編譯錯誤的

一.指標和一維字元陣列

#include

#include

#include

using

namespace std;

intmain()

之前的blog已經介紹過,指標可以當做陣列用

c語言陣列作為函式引數及指標與陣列的關係

但是指標和字元陣列並不完全相同

1.指標被當做字元陣列初始化之後單個字元不可以被直接賦值,s被儲存在一段唯讀區域中

char

*s="hello world"

;char

*s2=

"hello world"

; s[0]

='b'

;//這一段會報錯,s[0]屬於唯讀區域

printf

("s[0]=%c\n"

,s[0])

;

若要修改,需用字元陣列

如下:

char s3=

"hello world"

;printf

("s= %p\n"

,s);

printf

("s2=%p\n"

,s2)

; s3[0]

='b'

;printf

("s3[0]=%c\n"

,s3[0]

);

2.指標雖然無法修改單個字元,但可以直接將整個字串換掉,也就是直接指向另乙個字串如下:

#include

#include

#include

using

namespace std;

intmain()

執行結果:

可以看到,ptr指向的值已經被換掉了,而**中隱掉的s="xyz"是違規操作,會編譯錯誤 定義了字元陣列之後不能對該字元陣列進行直接賦值

3.對於字元型指標變數在沒有指向字元陣列的時候 除了一開始可以令指標變數指向乙個常量儲存區外 之後如果想要讀入新的資料必須開闢新的記憶體空間

第一種:未開闢新的記憶體空間(執行時會報錯)

#include

#include

#include

#include

using

namespace std;

intmain()

第二種:開闢新的記憶體空間

#include

#include

#include

#include

using

namespace std;

intmain()

執行結果

二.指標和多維字元陣列

我們知道,對於二維陣列而言,它的第二維的大小不可省略

前面已經提過 (star)a 可以作為一維陣列使用,同樣的*a也可以作為二維陣列使用

下面我們用一張圖來進行對比

1.scanf("%s",string);讀到空格/回車/tab

2.相對安全的輸入

scanf("%7s",s);(給定讀入的字串長度,不過依然不能讀空格)

3.getchar() putchar() (輸入輸出乙個字元)

char ch;

while

((ch=

getchar()

)!=eof)

4.gets() puts()可以錄入空格 (回車符結束)

1.strcpy

具體操作

#include

#include

#include

using

namespace std;

intmain()

執行結果

所以,s1實際上變成了

123\0efghijklmn(中間有個結束符)

2.strcat(s1,s2); 把s2接到s1後面

1.未對指標初始化

char

*string;

scanf

("%s"

,string)

;

string指向未知記憶體,容易出錯,要初始化為

C語言 字串指標(指向字串的指標)

字串一旦被建立就存在於常量池中。以字元陣列形式建立的字串,實際上是從字串常量池中複製了乙個副本,所以修改字元陣列的內容時,只是修改的自己的副本,並不會影響到常量池中的字串。而對字串指標strp操作時會影響到常量池中的字串 char strc string char strp string print...

C語言的字元陣列,字串,字串常量

首先來看一段源 include int main 剩餘部分為 0 char brr 不是字串,因為沒有 0 char crr 10 字元陣列特有 char drr 10 abc 字元陣列特有 char err abc 字元陣列特有 char frr 10 printf s n arr printf ...

C語言,字串的處理,陣列字串,指標字串。

c語言菜鳥教程 void memset void str,int c,size t n 複製字元 c 乙個無符號字元 到引數 str 所指向的字串的前 n 個字元。size t strlen const char str 計算字串 str 的長度,直到空結束字元,但不包括空結束字元。char str...