關於字串的賦值和strcpy 的區別

2021-05-25 05:12:29 字數 916 閱讀 7945

使用常量字串初始化char指標,或者使用strcpy複製,從語法上我覺得都是可以的。但是,在這個例子中選擇了後者,我覺得是有其他考慮的。

因為,ctermid_name是全域性的,可能用來傳送資料,將str指向這個位址,可能會和其他的函式同步乙個記憶體變數;而使用常量初始化:str="/dev/tty",那麼系統會分配位址,這樣str的位址是隨機的。

個人認為區別在於這裡。

「str="/dev/tty",那麼系統會分配位址,這樣str的位址是隨機的。」

系統沒有分配位址,str的數值是固定的。就和全域性ctermid_name是固定的一樣。因為"/dev/tty"是固定位址。

在看apue時遇到乙個問題,問題如下:

#include     

#include     

static char ctermid_name[l_ctermid];

char *

ctermid(char *str)

在這個函式裡,為啥用strcpy給指標賦值,而不直接賦值呢?

用以下簡圖來說明樓主的問題,直接賦值和拷貝是不一樣的且為什麼用拷貝而不用直接賦值.

strcpy(str."/dev/tty")

______________

str-------->|__|__|__|__|__|

^|copy過去 覆蓋原有內容.

________|_____

|/dev/tty/0      |

----------------

str="/dev/tty"

____________

str<------|/dev/tty/0      | 只把字元指標傳給str,而str指的原來區域的內容未改變.引起的可能後果就

---------------

是原來str指向的那塊記憶體丟失,記憶體洩漏

字串拷貝 strcpy 和 memcpy

char strcpy char destination,const char source 返回值 destination void memcpy void destination,const void source,size t num c實現 考慮到記憶體重疊的情況 void my memcp...

字串函式strcpy

strcpy是字串複製函式,作用是將字串2複製到字元陣列1中去。說明 1.字元陣列1必須定義得足夠大,以便容納被複製的字串 2.字元陣列1 必須寫成陣列名形式 如str1 字串2 可以是字元陣列名,也可以是乙個字串常量。3.如果在複製前未對str1陣列賦值,則str1各位元組的內容是無法預知的,複製...

字串的賦值

字串表示方法 char str 20 char ch 賦值操作 1 定義的時候賦值 char str 20 what pity char ch how are you 2 用字串複製函式 strcpy str,what pity 但是對於用指標表示的字串變數用複製函式賦值會出現問題,需要先申請記憶體...