C語言中定義了個char陣列,有些不明白

2021-08-07 14:18:53 字數 4490 閱讀 6228

1樓:草迎風

出現這種情況的原因是隱藏的。

char name = "";這一句裡將一個'\0'賦值給name陣列,這時name陣列並沒有指定長度,但它是一個陣列,也就是一個指標,指標在機器上一般是佔用4個位元組的。

所以在後來的scanf("%s",&name);語句裡,你的輸入格式是%s,而輸入的是&name,也就是取地址符號,這就是問題的關鍵所在!

你取地址取的是name指標的地址,所以輸入的字元都存放在name裡面,但name只有4個位元組(指標佔4位元組),這樣就預設了name陣列只能存放4個字元,每個字元佔1個位元組!其實在這裡,name也可以說是陣列,但其本質上是存放4個位元組的儲存空間。

因此,這裡只能夠輸入4個字元!如果超出了4個字元,編譯器會自動將超出的字元存放在後續的儲存空間裡,這裡的後續不是接連的意思。但在printf("%s",name);輸出時候,編譯器沒有檢測到'\0',所以即使將輸入的字串全部輸出,也會在輸出最後一個字元後導致輸出異常,停止輸出。

如果輸入沒有超過4個字元,輸入合法,在scanf("%s",&name);時候,編譯器會在其末尾附加上'\0',當輸出時候就正常輸出。

2樓:匿名使用者

#include

#include

main()

3樓:一崽

樓主為啥不直接定義一個指標呢。

char *name;

name=(char *)malloc(30*sizeof(char));

scanf

printf

c語言中定義陣列時可以不定義長度嗎,這樣:uint8 array[]。看到一個函式的引數是這樣定義的

4樓:

函式引數可以這樣定義,表明該引數是一個陣列的指標,至於陣列有多少個元素可以不知道。

但是在程式段落中不可以這樣定義,不知道有多少個元素,編譯器就不知道到底要為這個陣列分配多少記憶體,編譯器會報錯。

5樓:

不能=。= 函式的引數是因為之定義他的形參而已,比如 int x啊的只是形式引數而已,只是告訴函式他的引數是什麼型別額,以及如何在函式中呼叫

而你在正式使用的話一定要進行定義。

6樓:匿名使用者

c語言中可以定

bai義個數du不確定的動態數zhi組,但不是用uint8 array;這樣來定dao義回的,這樣會報答錯。定義個數不確定的動態陣列必須先宣告一個指標,然後用malloc為這個指標分配一段連續的空間,然後退出程式的時候要記得使用free釋放這些變數空間,否則會造成記憶體洩露。

比如你要定義一個字元型的動態陣列,可以先宣告一個字元型指標:

char *charnew;

然後在需要定義陣列的時候,用下面語句開闢一定量的連續空間:

charnew=(char*)malloc(10*sizeof(char));

這樣你就可以像一般陣列一樣,用charnew[1]來訪問陣列中的元素;

當退出程式時,你要使用:

free(charnew);來釋放資料空間。

c語言結構體中的一個char陣列怎麼賦值?

7樓:

常用兩種措施:

在宣告結構體變數時初始化,如——

//#include "stdafx.h"//if the vc++6.0, with this line.

#include "stdio.h"

struct stu;

int main(void);//這樣初始化printf("%d %s\n",s.x,s.name);

return 0;

}向陣列裡直接拷貝字串,如——

//#include "stdafx.h"//if the vc++6.0, with this line.

#include "stdio.h"

#include "string.h"

struct stu;

int main(void)

8樓:凌亂心扉

(1)用字元常量逐個初始化陣列。例如:

char a[8]=;

把8個字元依次分別賦給c[0]~c[7]這8個元素。

如果在定義字元陣列時不進行初始化,則陣列中各元素的值是不可預料的。如果花括號中提供的初值個數(即字元個數)大於陣列長度,則出現語法錯誤。

如果初值個數小於陣列長度,則只將這些字元賦給陣列中前面那些元素,其餘的元素自動定為空字元(即'\0')。

如果提供的初值個數與預定的陣列長度相同,在定義時可以省略陣列長度,系統會自動根據初值個數確定陣列長度。

例如:char c=;

這時c陣列的長度自動定為9。也可以定義和初始化一個二維字元陣列,例如:

char diamond[5][5]=,,,

,};用它代表一個菱形的平面圖形。

(2)字串常量初始化陣列。例如:

char c=;

可寫為:char c=;

或去掉{}寫為:char c="c program";

注意:此時陣列c的長度不是9,而是10。因為字串常量的最後由系統加上一個'\0'。上面的初始化與下面的初始化等價。

char c=;

其定義的一般形式是:char陣列名[資料長度]

例如:char c[10];

c[0]='i';c[1]='';c[2]='l';c[3]='o';c[4]='v';c[5]='e';c[6]='';c[7]='y';c[8]='o';c[9]='u';

以上定義了c為字元陣列,包含10個元素。

由於字元型資料是以整數形式(ascii**)存放的,因此也可以用整型陣列來存放字元資料,例如:

int c[10];

但這時每個陣列元素佔2個位元組的記憶體單元,浪費儲存空間。

字元陣列也可以是二維或多維陣列,例如:

char c[5][10];

即為二維字元陣列。

初始化字元陣列的初始化與數值型陣列初始化沒有本質區別。但它除了可以逐個給陣列元素賦予字元外,也可以直接用字串對其初始化。

輸入輸出

字元陣列的輸入

(1)用getchar()或scanf()的'%c'格式符對陣列進行字元賦值。例如,對於陣列a[10]:用getchar()賦值:

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

a=getchar();

用scanf()賦值:

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

scanf("%c",&a);

(2)用scanf()的'%s'格式對陣列賦值。還是對於陣列a[10]:

scanf("%s",a);

或scanf("%s「,&a[0]);

輸入」c program「並回車時,a陣列會自動包含一個以」\0「結尾的字串」c program「。

字元陣列的輸出

(1)用putchar()或printf()的『%c』格式符對陣列進行字元賦值。例如,對於陣列a[10]:用putchar()賦值:

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

a=putchar();

用printf()賦值:

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

printf("%c",a);

輸出結果為:

c program

(2)用printf()的'%s'格式對陣列賦值。還是對於陣列a[10];

printf("%s",a);

輸出結果為:

c program

9樓:禮浦業雲韶

好吧,比如:

struct

emu=

那麼對char

ch賦值可以

for(j=0;j<=49;j++)

emu.ch[j]=j;

或者一個字元一個字元的賦值,比如emu.ch[0]='a';

對字串的賦值不能直接等於,要用函式strcpy,

10樓:匿名使用者

st.name="123"; 非法,常量字串不能直接賦值給字元陣列,因為st.name 地址是確定的,不能再改了。

char name[10]="123";可以的,定義時,進行初始化字元陣列。

11樓:匿名使用者

可以用string.h,標頭檔案裡面的strcpy()函式,拷貝

c語言裡面要定義一個字串陣列,陣列元素個數不確定,每個元素的長度也不確定,求動態定義的方法

12樓:匿名使用者

你可以用動態分配記憶體的方法,

比如你要建立一個字串陣列:

char *str;

str=(char *)malloc(n);

n是變數,可以在確定了變數的值後再用以上**分配記憶體,而str字串可以以一般陣列的用法使用,比如*str="hello";的話

str[1]='l';

最後別忘了釋放記憶體

free(str);

關於C語言中陣列的定義,C語言中如何定義陣列

一樣的,陣列在做函式引數時,傳遞給函式的都是陣列的首指標,哪怕你的函式這樣寫 void swp int p 在呼叫的時候swp array 也是可以的。只要傳遞給函式一個陣列的首指標就行了,而你的array正好是陣列的首指標。char s 10 123 是表示前三個元素分別是1,2,3但s 2 0 ...

c語言中如何定義二維陣列,C語言中如何定義一個二維陣列

int a 2 3 a 0 0 a 0 1 a 0 2 a 1 0 a 1 1 a 1 2 表示兩行三列 include main int i,j,total 0 for i 0 i 3 i printf n printf total d n total 用指標new出來 二維陣列定義必須規定列 i...

c語言中如何判斷兩個char型的陣列是否相同

為什麼用strcmp比較出來是不相等,難道你的a,b不是字串,而是分別有10個字元把陣列佔滿了,那樣的話strcmp肯定不能用的,strcmp只能針對字串.使用 0 啊,即先用長度函式 不好意思我不記得拼寫了 判斷兩者長度,長度相同時,求出長度n,此處n 1。然後a 1 0 b 1 0 意思即是a ...