C語言關於字串和字元陣列的轉化問題

2021-10-10 17:11:14 字數 1384 閱讀 3333

要把字串轉化為字元陣列是很簡單的,有手就行,在這裡就不討論也不解釋了,**如下:

int

main()

return0;

}

char

*str

(char numstr,

int numstrsize)

//這裡傳入乙個字元陣列,numstrsize是其長度

s[numstrsize]=0

;return s;

//返回乙個字串

}

為什麼要分配numstrsize+1個呢,這是因為,字串是以『/0』結尾的,0不計入字串長度,只計入字元陣列長度。

那麼有萌新會問,可不可以定義乙個字元指標,讓它直接指向字元陣列的首位址呢,這當然是不行的,由於陣列名代表陣列的首位址,所以如果我們定義乙個字元指標直接指向字元陣列的話,它其實指向的是字元陣列第乙個字元的位址,所以這是不行的。

如果我們定義乙個字元指標,不分配位址,然後將字元陣列中的字元存進去呢,這就更扯淡了,不分配記憶體的話,它指向**呢?所以我也想過讓它指向另乙個和我們需求一樣長度的字串,然後修改字串裡面的字元,讓字串裡面的字元被修改為字元陣列裡的字元,這樣可不可以呢?就像這樣:

int

main()

;char

*st=

"hello!"

;int i;

for(i=

0;i<

6;i++

)printf

("%s\n"

,st)

;return0;

}

答案是不可以。這是為什麼呢?因為字串被儲存在唯讀的常量儲存區中,所以不能對字串直接進行修改。我也正是因為忽略了這一點,所以才遲遲沒有弄清楚其中的玄機,而且之前用的很熟的堆記憶體分配函式也沒被我想起來,這就直接導致了我整整一天都被搞得一頭霧水,那種很迷糊的感覺,萌新們應該深有體會吧。

最後給大家隆重介紹一下堆記憶體分配函式

堆記憶體分配函式的用法:

用法:指標名=(資料型別*)malloc(要申請記憶體空間的數量*要申請記憶體空間的位元組長度)。如果不宣告要申請記憶體空間數目的話,則預設只申請乙個記憶體空間。

malloc 向系統申請分配指定size個位元組的記憶體空間。返回型別是 void* 型別。void* 表示未確定型別的指標。malloc()函式其實就在記憶體中找一片指定大小的空間,然後將這個空間的首位址範圍給乙個指標變數,這裡的指標變數可以是乙個單獨的指標,也可以是乙個陣列的首位址,這要看malloc()函式中引數size的具體內容。

標頭檔案:#include 有些編譯器需要#include ,在tc2.0中可以使用alloc.h標頭檔案。

類似函式:calloc函式、realloc函式、free函式。

玩兒轉C語言 字元和字串

在c語言中,利用單引號和雙引號分別表示字元和字串,字串是指一串以nul位元組結尾的零個或多個字元。因為字串通常儲存在字元陣列中,所以c語言中不存在字串型別。但在使用時,如果不能真正理解兩者的本質區別,有可能會出現一些詭異的現象。下面我將通過實驗,進行詳細分析 1 字元特性試驗,如下 cpp view...

C語言字元陣列和字串

用來存放字元的陣列稱為字元陣列,例如 char a 10 一維字元陣列 char b 5 10 二維字元陣列 char c 20 給部分陣列元素賦值 char d 對全體元素賦值時可以省去長度 字元陣列實際上是一系列字元的集合,也就是 字串 string 在c語言中,沒有專門的字串變數,沒有stri...

c語言字元轉字串 C語言字串的另類用法

講這個例子前,咱們先來看乙個簡單的程式 字串陣列實現數字轉字母 include include int main void 當然我們也可以這麼寫,用指標的形式來表示 include include int main void 同樣的,結果也是和上面是一樣的,我們再對這種寫法進行簡化,如果初學者的基礎...