c語言字元串初始化
❶ c語言字元串數組初始化時剩餘長度全部為'0'嗎
在C語言中,字元串數組的初始化會自動在字元串的末尾添加'\0'字元,以表示字元串的結束。這意味著剩餘的數組空間會被初始化為'\0',形成一個空字元串。以Xcode自帶的clang編譯器為例,通過運行gcc -S main.c命令查看匯編輸出,可以發現這一過程。
當數組的大小發生變化時,字元串後面的'\0'也會相應變化。例如,將數組大小更改為str[20],則字元串後的'\0'也會相應更改為對應大小的'\0'序列。
這串字元存儲在文本節中,並在復制到棧定義的數組時被覆蓋。若將數組大小進一步增加,如設置為str[100],匯編輸出將切換為調用memset函數,以確保剩餘空間的'\0'初始化。
❷ c語言中char*的初始化問題
char *a;
a是一個字元型指針,因為賦指時沒有為a分配內存空間,所以a的指向是不確定的,那麼a就有可能指向內存的重要區域
第二種方法,scanf("%s",a);直接將輸入的字元串寫入a指向的空間,所以極有可能破壞重要數據,引起系統崩潰。如果真要這么用,要先分配空間char *a=(char *)malloc(12);
而第一種方法,a = "Hi, you!";,其實在編譯器看來,先為"Hi, you!"分配了一塊空間,"Hi, you!"其實是它所在的空間首地址。所以a = "Hi, you!";其實是將a重新指向"Hi, you!"的空間,所以沒問題。
注意,char *a="Hi,you!";和char *a; a = "Hi, you!"; 是一樣的。
而不同於char *a; strcpy(a,"Hi, you!");
這種是不對的,是將"Hi,you!"直接復制到a的空間里,所以也不安全
❸ c語言字元數組初始化語法:char str[]=""與char str[]={}有何區別
區別不大,看你怎麼用
如果你這樣寫:
char str[]="abc" ;
char str[]={"abc"} ;
那就沒區別
char str[]="abc" ;
char str[]={'a','b','c'} ;
那就有區別了,char str[]="abc" ;相當於char str[]={'a','b','c',0 } ;
這樣就看出區別了,數組長度不一樣,一個是4因為會自動添加一個結束符,一個是3不會添加結束符。
❹ c璇璦緙栫▼錛屾彁紺鴻緭鍏ヤ竴涓瀛楃︿覆string錛岀劧鍚庡湪string閲岄潰姣忎釜瀛楁瘝闂村姞涓涓絀烘牸錛岀敤鎸囬拡瀹屾垚
1銆佸畾涔夊拰鏋勯犲垵濮嬪寲錛宻tring 鎻愪緵浜嗗緢澶氭瀯閫犲嚱鏁幫紝鍙浠ヤ互澶氱嶆柟寮忔潵鍒濆嬪寲string瀛楃︿覆銆