c語言字元串數組初始化
『壹』 c語言字元數組初始化的問題
char *a[ ]={"asdf","asdfsadf"}這個是指針數組,相當於char *a[2]={"asdf","asdfsadf"}
然後第一個是char a[1] = {'a','s','d'},char a[2] =......
char a[ ]={"asdf","asdfsadf"} 這樣是不行的,如果是字元數組,就得用單引號,雙引號是字元串,
char m1[ ]={'a','b','c''\0'} 這個是字元數組,
char m1[ ]={'a','sdfb','c''\0'},這樣是不行的,單引號裡面是一個字元,雙引號才能出現連續字元。
如有不明可以追問。
『貳』 c語言字元數組初始化
如果是定義的全局,變數字元數組可以不用初始化因為全局變數會自動初始化為0值。如果是局部變數可以在定義的時候就給他初始化,也可以在定義完成以後,再用一個循環對他的所有元素進行初始化。
『叄』 C語言 程序設計 關於數組的初始化
你好!!!
char s[]="BOOK"
char s[10]="BOOK"
都表示在聲明數組的時候,就初始化,就是先了定義,即給數組分配了內存空間,系統並把字元「BOOK」,放到剛才的空間里,所以是符合語法的。
但是
char s[10];
s[10]="BOOK"
和 char s[10];
s[]="BOOK"
都是錯誤的,原因是:語法規定字元數組要是在聲明的時候沒有初始化,就沒有機會直接賦值了(具體的原因後面再說)
要想賦值,必須用strcpy()
但是我們定義字元指針就不一樣了,比如:
char *p;
p="hello";表示此時定義了一個指針變數,此時系統會把字元串="hello";放到內存的靜態存儲區(即內存的一種,是靜態的原因是里的值是不能修改的)並把字元串的首地址賦值給指針變數p,使指針變數指向字元串;這是可以的。
現在我們看看:
char s[10];
s[10]="BOOK"
和 char s[10];
s[]="BOOK"
到底是什麼原因:
char s[10];首先聲明了字元數組,但是沒有分配空間,接著
s[10]="BOOK"因為現在的是數組s已經聲明過了,系統會先字元串放到靜態存儲區,然後返回一個指針,但是此時等號左邊是數組而且有10個位元組這么大,等號兩邊都是不同類型的,怎麼可以賦值呢???
編譯器檢查錯誤就會報錯了。
呵呵,希望lz可以理解。
『肆』 c語言如何先聲明後初始化字元數組
在定義的時候就對數組進行賦值操作稱為初始化;
先定義後賦值並不能稱為初始化,只能叫做對數組進行賦值操作。
舉例如下:
chara[]="abcd";//定義(聲明)字元數組a,並進行初始化
//以下為數組的賦值操作
charb[5];//定義(聲明)一個字元數組b
//對字元數組每個元素進行賦值
b[0]='a';
b[1]='b';
b[2]='c';
b[3]='d';
b[4]='e';
『伍』 c語言的字元串數組初始化問題
你申請數組空間後,內存中存放字元的順序是:
str1[0],str1[1],str1[2],str1[3],str1[4],str2[0],str2[1],str2[2],str2[3]
當輸入字元串是:abc 123時,存儲的數據str1[0]~str1[4],str2[0]~str2[3]為:
『a','b','c',0,xx,'1','2','3',0
其中,xx表示一個不關心的任意值,也就是說輸入字元串"abc"需要佔用4個位元組的存儲空間
當輸入字元串1為"abcde"時,存儲的數據為:'a','b','c','d','e',0,xx,xx,xx
字元串末尾的0已經超出了str1開設的存儲空間而存放到了str2[0]位置
接著再輸入字元串"1234"時,str2[0]的str1字串的結尾符被字元'1'覆蓋,
存儲的數據為:'a','b','c','d','e',』1『,』2『,』3『,』4『,0
而且由於str2輸入字元數為4個其佔用空間也超出了str2的空間范圍,那麼上邊存儲的0值也不知道覆蓋了什麼變數的位置,導致其他變數的值被沖掉了。
當執行printf("%s ",str1);時,printf從str1[0]開始輸出的字元串(遇0結束輸出)為abcde1234
當執行printf("%s ",str2);時,printf從str2[0]開始輸出的字元串(遇0結束輸出)為1234
所以你輸入的第1個字元串字元數少於5時,存儲不會溢出,多於4個時,末尾的0就會被輸入的str2所覆蓋而失效,且多於5的字元也會被覆蓋。scanf並不能保證輸入字元的長短不會溢出,你應當在設計程序時考慮到這點,預先定義足夠的字元串保存空間或用其他方法來避免這個問題的出現。
『陸』 C語言定義字元型數組時,兩種初始化方式的區別
『柒』 C語言中 字元串數組的初始化格式是怎麼樣的
比如:
char
a[10]="\0";
用API
memset(a,'\0',sizeof(a));
也可以寫個for來完成
記得採納啊
『捌』 c語言 如何將已賦值的字元串初始化為空
可以使用memset函數將字元串數組中所有元素全部設置為\0即可。
函數原型:void
*memset(void
*s,
int
ch, size_t n);
函數說明:將s中前n個位元組
(typedef
unsigned
int
size_t
)用
ch
替換並返回
s
。
示例:
#include <stdio.h>
#include <string.h>
int main()
{
char buf[256] = "hello world"; //buf字元數組初始化
printf("%d\n", strlen(buf));
memset(buf, 0x00, sizeof (char) * 256); //全部設置為0x00即\0字元
printf("%d\n", strlen(buf));
return 0;
}
『玖』 C語言中,字元數組(字元串)初始化方式區別
數組長度指的是數組的元素個數,字元串長度是以『\0』為標志來確定的,舉個例子:
char a[20]="abc";
數組長度是20,而字元串長度是3,隱含的'\0'不算在字元串長度中。
『拾』 c語言字元串對字元數組初始化
不可以,array bound overflow,數組越界,還要存一個'\0'.
其實碰到這種問題,你應該自己去開發環境中試一下,看看報不報錯。