c語言是否可以定義空字元陣列 而不賦值

2025-07-09 22:30:15 字數 5774 閱讀 7288

1樓:網友

可以。如果不賦值,陣列內也有值(系統預設賦給的),但是這些預設值是隨機的,最好能在程式中對其進行賦值,否則應用此陣列時會出現亂碼及各種問題。最後還要在串最後賦乙個'\0',以示此串結束。

2樓:網友

char a[5]=;

另外如果將陣列定義為靜態陣列,可以直接被設定初值為空,你試一下吧。

3樓:網友

可以的,首先可以定義個字元陣列,然後通過鍵盤讀入或者直接從檔案中讀入字元。

儲存就可以了。

不過還要在定義前判斷陣列的大小,別越界就可以啦~

二級c語言問題 字元陣列可以在定義時對其整體賦初值,但在賦值語句中不能完成整體賦值。 不懂。。能否

4樓:映月冰凌

比如前有定義語句int a[3]=;那麼整個陣列a的3個值均為0。

但如果後面有賦值語句如 a[3]=0 則僅能將第3個陣列元素的值賦為0,而非整個陣列。

5樓:網友

定義賦初值是指 這樣:int a={1,2,3,4,5}; 而賦值語句賦初值是這樣: int a ;a=1;a=2,。。

a=5;而不能是這樣 a={1,2,3,4,5};就是說如果不是在定義的時候賦值,單獨賦值就要對每個成員依次賦值而不能整體賦值。

c語言怎樣給字元陣列賦值

6樓:蕉蕉

1、單字元賦值,可通過陣列下標方式或指標方式,引用陣列元素,進行賦值。

例子:char a[10];

char ch='a';

for( i=0;i<10;i++

a[i]=ch+i ; //可通過陣列下標引用陣列元素,完成賦值char *p;

for( p=a; p*p=ch++;//通過指標對陣列相應元素賦2、字串賦值,可使用標頭檔案中的字串操作函式進行賦值。

例子:char a[10];

strcpy( a, "abcdefgh");

sprintf(a, "%s", "abcdefgh");

7樓:文庫精選

內容來自使用者:nian_xiaohui

1、字元陣列的定義與初始化字元陣列的初始化,最容易理解的方式就是逐個字元賦給陣列中各元素。charstr[10]={'i','','a','m','',『h』,'a','p','p','y';',『10即把1010個字元分別賦給str[0]str[9]10str[0]到str[9]10個元素如果花括號中提供的字元個數大於陣列長度,則按語法錯誤處理;若小於陣列長度,則只將這些字元陣列中前面那些元素,其餘的元素自動定為空字元(即'\0')。2、字元陣列與字串在c語言中,將字串作為字元陣列來處理。

c++(c++c++中不是)在實際應用中人們關心的是有效字串的長度而不是字元陣列的長度,例如,10040定義乙個字元陣列長度為100100,而實際有效字元只有4040個,為了測定字串的實c「」'\0際長度,c語言規定了乙個「字串結束標誌」,以字元'\0』代表。如果有乙個字'\0』10'\0'9符串,其中第1010個字元為'\0''\0',則此字串的有效字元為9個。也就是說,在遇到'\0''\0'時,表示字串結束,由它前面的字元組成字串。

第乙個字元'\0''\0'"cprogram」9系統對字串常量也自動加乙個'\0''\0'作為結束符。例如"cprogram」共有9個字10'\0'符,但在記憶體中佔1010個位元組,最後乙個位元組'\0''\0'是系統自動加上的。通過sizeof()(函式可驗證)'\0'有了結束標誌'\0''\0'後,字元陣列的長度就顯得不那麼重要了,在程式中往往依靠'\0'檢測'\0''\0'的位置來判定字串是否結束,而不是根據。

8樓:幻夢·人生

其實你的bai第二種賦值方式。

du是很危險的。容易產生zhi問題。

因為dao字串"china"實際上是六個內字元。

在容a的後面有乙個字串結尾識別符號'\0'

不過這個是個警告。

回到正題。當你使用。

char x[5]="china";

進行初始化的時候,程式會自動將'c' 'h'' 'i' 'n' 'a' '\0'依次賦值到x中。

x的實際儲存情況與char x[5]=;完全相同而scanf的傳入的引數是是陣列x的名稱。同樣也是x的首位址在scanf進行操作同樣是將china分解,依次賦值到x中當進行字串讀取的時候,程式會連續讀取字元,直到遇到'\0'為止由於你的x[5]沒有儲存'\0'

所以有可能會產生錯誤。

為什麼是有可能呢?

因為記憶體初始化的時候,x[4]的後面,很可能就是0相當於『\0』

所以你的程式會讀取到這個'\0',認為字串已經結束誤打誤撞不報錯。

9樓:網友

給字元陣列賦值抄。

分兩種情況,單字元賦值和字串賦值。

單字元賦值,可通過陣列下標方式或指標方式,引用陣列元素,進行賦值,如:

char a[10];

char ch='a';

for( i=0;i<10;i++

a[i]=ch+i ; //可通過陣列下標引用陣列元素,完成賦值char *p;

for( p=a; p

字串賦值,可使用標頭檔案中的字串操作函式進行賦值,如:

char a[10];

strcpy( a, "abcdefgh");

sprintf(a, "%s", "abcdefgh");

注意:陣列在定義時,可以同時進行初始化,但定義完成後,就不能按初始化的形式對其賦值了,如:

char a[10]="abcdefgh"; //這樣可以a="abcdefgh"; //這樣是錯誤的!a是陣列名,是乙個靜態資料:陣列首位址值,可以看作是個常數,不能再被改變。

10樓:網友

上一節我們學習了c語言中的單目運算子,這一節我們學習c語言中賦值操作需要注意的點。

11樓:唯話子

雖然是計算機語言c語言的組合,要經過專門學習才能夠進行。

12樓:會忘記時間的鐘

char a[7]=;

可以用strcpy賦值,但是要保證a陣列的空間夠大,能夠放下需要賦值的字串。

strcpy(a,"ddgh");

13樓:

題有問題,bai 在家都看出來了。

du 致於記憶體表示方法zhi,char x=; 後面dao的不管,char x="china"; 後面的自動補版 0scanf("%s",x), s 方式也會補0, 如果權用 用 多個 %c , 不會最後補0

14樓:網友

對於字元陣列來的賦值。

下面兩種源賦值方式:

char x=;

char x="china"

是等同的。在字串的最後會隱藏乙個標誌著字串結束的字元'\0'

不然的話,程式**知道輸出字串應該在輸出哪乙個字元後停止?

而scanf("%s",x);語句接收到輸入的china會執行下面的過程:

x="china"

也就是x=內個,從上面可以見到,x要容納6個字元,所以應該是char x[6]="china";

15樓:網友

a="dsfsdf"這是字串賦值。字元都是單引號,只能乙個乙個賦值。

16樓:小呆小呆

你的第二種賦值方法是錯的:

char x[5]="china";

x[5]代表陣列有5個元素,但是"china"代表乙個字串,其中有6個字元,專每個屬字串預設都有乙個結尾標誌字元'\0'。所以"china"其實應該是'c','h','i','n','a','\0'這6個字元。陣列空間明顯不夠。

用scanf函式輸入字串的時候,也是自帶結尾標誌字元的。所以,如果要輸入成功,陣列應該定義為char x[6];多定義乙個元素用來存放結尾標誌字元'\0'。

17樓:網友

你的意抄思我大概懂了!你是要實。

bai現不再定義時賦值du

而是在定義後賦值吧!zhi

這個好像不dao

能在cz中實現的,但是用字元指標可以實現相似的功能!具體操作如下:

#inlcude

void main()

後面的輸出是先把首位址輸出,然後位址自動加1,再輸出,就輸出量字串不知道這個是否可以代替樓主的那種想法?

18樓:戀晴忽忽

int i;

for(i=0;i<7,i++)

scanf("%c",&a[i]);

還可以在前面加個標頭檔案。

#include

然後程式裡面。

gets(a);

19樓:根號

先糾copy正一下,字串「china」在記憶體中的存放是bai這樣的:'c''h''i''n''a''\0',多了乙個du'\0',表示zhi字串dao結尾。

你scanf輸入china,如果字串長度是5,也就是char x[5];就是x[0]='c',x[1]='h',x[2]='i',x[3]='n',x[4]='a';

如果char x[6或是更大的數];x[0]='c',x[1]='h',x[2]='i',x[3]='n',x[4]='a',x[5]='\0'

你的問題是 :系統會以;還是以"china";呢?

如果陣列長度=5,或"china" 的0~4位是一樣的;

如果陣列長度大於5,等價於"china",因為x[5]='\0';而不會初始化x[5]

懂了吧?注意剛接觸c語言,陣列下標從0開始數,字串以'\0'結束,這些都是最最基本的概念,祝好!

20樓:gz陪你看雪

不行,你的while迴圈是錯的,用for 迴圈。

char a[15][50];

int i;

for(i=0;i《你想輸的幾句話的數量;i++)gets(a[i]);

c語言 不能把字串賦給字元陣列的是

21樓:網友

char s[20];s="helo";這樣錯誤的原因就是:不能用賦值語句將乙個字串常量直接給乙個字元陣列賦值。

char s[20];

char ss="hello";

s=ss;錯誤原因是:不能用賦值語句將乙個字元陣列直接給乙個字元陣列賦值。

即字串的複製(c語言中,但是在c++的string 類,上面的賦值是正確的)必須用strcpy()函式實現。

而char a[ ]=」toyou「;正確的原因是:因為在宣告陣列變數的時候就是,為其開闢空間,併為其初始化,這樣才是符合c語言語法的。

22樓:gta小雞

a.字串缺少結束標記。

d.編譯錯誤。

23樓:網友

錯誤的是d,其它全部正確。

c語言裡為什麼不能用賦值語句對字元陣列進行整體賦值

24樓:veket的小號

字元陣列用char 不用。

復inta[10] 表示 陣列元素不製表示陣列整體, 陣列實際 是a[0]到a[9]同10個元素,不存在a[10]

int a[10]=;定義陣列順便完成整個陣列的 初始化 √(這是初始化 不是「整體」操作賦值。

分兩步int a[10]; 先定義陣列 √

a[10]=; 然後使用陣列 × 不能「整體操作」陣列,記住 不要在c中試圖「整體操作」給整個陣列賦值。

c語言字串陣列的問題C語言字串陣列的問題

include int main scanf s a for i 0 a i 0 i for j 0 j 5 j 修改 1 下標從0 4,共5個 return 0 每行結尾的 僅僅是為了連線字串使用的,如果一個字串過長,寫在一行比較不合適,就在該行結尾處加上一個反斜槓 就可以在下邊的行繼續寫這個字串...

C語言中,不同的函式中,可以定義相同的 變數名嗎

可以,區域性變數的生命週期僅僅存在於乙個花括號之內。看你在那裡定義了,在函式內定義是可以的,函式外不可以。可以,區域性變數是可以的,全域性變數是不可以重複的!c語言 在不同的 c 檔案中可以定義相同名稱的函式嗎?這當然都是不可以的,除非這幾個。c檔案不會相互呼叫,即不同時存在於乙個工程之內,完全獨立沒有關...

如何定義定義的字串,C語言中如何定義字串?

定義的字串 可以通過字元陣列或字元指標來定義字串,也可以用巨集定義對常量字串進行定義。下面通過舉例來分別進行說明 char str1 helloworld 通過字元陣列來定義字串 helloworld 陣列中每個儲存單元存放一個字元 char str2 helloworld 通過字元指標來定義字串 ...