使用常量字串初始化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 但是對於用指標表示的字串變數用複製函式賦值會出現問題,需要先申請記憶體...