關於字元陣列的賦值問題!字元陣列賦值問題

2023-01-27 13:10:03 字數 5794 閱讀 1380

1樓:

22, 選a 理由: 字串是以'\0'結束的, 所以加上"good!"就是6個位元組, 而陣列的大小才是5,所以空間不夠, 大小至少為6, 改為 char str[6]="good!

";或者。char str="good!";都可以,後者根據字串的字元個數自動匹配陣列大小。

34, 選c 理由: 同17題。

3, 選a 理由: 同17題。

哥哥我給你總結如下:

關於字元陣列的賦值問題,首先陣列名本身就是個指標,指向了陣列的第乙個元素的位址。另外陣列名是個指標常量,或者叫位址常量,也就是當定義乙個陣列時, 陣列名就指向了本身的位址空間, 是個常量, 不可以再指向別的位址。

故正確的賦值方式是:

char str[6] =

或者char str = 陣列大小會根據字元個數自動匹配。

或者char str[6] =hello";

或者char str = hello";/陣列大小會根據字元個數自動匹配。

要注意的就是字串是以'\0'結束的,不要忘記這個。

另外還可以通過字串位址賦給指標變數的方式。

例如:char *str = hello";/定義時同時初始化。

等價於如下寫法,先定義,後賦值。

char *str;

str = hello";

這種賦值方式就是把字串常量"hello"的首位址賦給指標變數str。

字元陣列賦值問題

2樓:幻夢·人生

其實你的第二種賦值方式是很危險的。容易產生問題。

因為字串"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',認為字串已經結束誤打誤撞不報錯。

3樓:匿名使用者

首先,char x[5]="china";這個100%是錯誤的,陣列至最少需要定義為6個元素,也就是至少是char x[6]="china";字串結束符'\0'也要佔位。

scanf("%s",x);使用這種方法(注意同上,長度至少也是strlen()+1 ),也是要算上字串結束符'\0'的。

4樓:渾修

題有問題, 在家都看出來了。 致於記憶體表示方法,char x=; 後面的不管,char x="china"; 後面的自動補 0scanf("%s",x), s 方式也會補0, 如果用 用 多個 %c , 不會最後補0

5樓:匿名使用者

對於字元陣列的賦值,下面兩種賦值方式:

char x=;

char x="china"

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

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

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

x="china"

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

6樓:小呆小呆

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

char x[5]="china";

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

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

7樓:青春無情

前面的,你可以去執行哈撒,c裡字元和數字相互輸出。

8樓:根號

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

你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'結束,這些都是最最基本的概念,祝好!

9樓:李小龍

樓上說得好詳細了,我就不再補充了。

10樓:電子劍客

兩者相同,只是表示的方法不一樣。

字元陣列賦值的問題

11樓:俎飲桑志澤

變數賦值好比提籃子買菜,只要籃子能裝下菜,就可以用。(籃子=變數,菜=值)

char型別只佔乙個位元組。

int佔四個位元組(32位機)

所以,len=buff[0];/這個是將字元陣列中的第乙個字元賦給乙個整型變數。

len?合理、合法。

12樓:鐵恨嶽秀慧

len=buff[0];buff陣列初始化後,這樣賦值也沒什麼問題,畢竟整形範圍比char範圍大。

但是,傳給len的值是ascii碼。

13樓:匿名使用者

賦值可以直接 =「zhoujie」,這個函式是複製函式,是為了方便有時候在乙個陣列裡操作會改變我們不期望的改變,所以複製乙個副本。

字串和字元陣列幾乎差不多,所以可以char *s="afasfasf",s="asfdasf",也可以單個元素賦值。

14樓:看看窗外飛仙

name是乙個陣列,指向一塊大小為20*sizeof(char)記憶體,用來儲存字元,這裡name是乙個靜態的,長度不可變的陣列,不是乙個通常意義上的指標,換句話說,這個指標只能指向這塊大小為20*sizeof(char)的記憶體,這個地方name不能被賦值,則必須使用strcpy把後面的字串中的字元乙個乙個複製到陣列中。

c\c++中通常意義上表示字串是使用的字元陣列,c\c++中的字串是一串以'\0'為識別符號的char型陣列,例如,char * p = abcdefg",那麼p指向一串不可修改的char型陣列,char s[20] =abcdefg」相當於以下賦值:

char s[20] =

那麼使用printf對p和s進行輸出時(printf(p);printf(s))效果一樣。

只需記住c\c++中沒有字串這一獨立的資料型別,字串時使用字元陣列進行表示的即可。

15樓:匿名使用者

1,第乙個問題:strcpy

對於陣列來說,可以在定義的時候進行初始化直接賦值的,如struct stu student =

如果是先定義,再賦值就不行了,因為定義同時初始化是在編譯階落進行的。

而隨後的賦值是在執行期間,只能用函式進行字串的copy才行。

2,char name[20] =

和char name[20] =zhoujielun";

是一樣的,只不過前者是乙個字元乙個字元的進行初始化;後者是近字串進行。它們都是在定義的時候進行初始賦值的。

【字串都是以雙引號進行表示的】

strcpy(,「zhoujielun」);

16樓:匿名使用者

這些都是c語言中的規定,你可以再看一下c!希望 能幫助你!

c語言 關於字元陣列賦值問題 50

17樓:

把scanf_s("%s", s);改成scanf_s("%s",,s,100);,再它放到主函式中就沒有什麼錯誤了!

18樓:網友

scanf_s("%s",s,100); scanf_s函式要加上buffer的大小。

19樓:我是逗比

scanf函式裡s應該是&s,是傳址引數。

c語言字元陣列賦值問題?

20樓:匿名使用者

這個itoc是按照十進位製數不斷除以2除餘數的方法來實現的,所以最後要將餘數倒置才是正確的結果。

首先,字串裡存的是字元'0'和'1',所以for(int i=0;m>0;i++)

然後,加上。

for(int j=0;jtemp[i]='0';

關於你的問題:

1、c語言裡,陣列就是用其首位址表示的,所以傳位址就相當於傳陣列2、c語言認為所有的資料都是二進位制存放的,所以可以通過型別強制來任意轉換,不過不會改變二進位制數值。這裡m%2後結果為0或1,int會自動轉換為char型資料傳給temp[i],不過傳的仍然是值為0或1的char資料,而不是字元'0'和'1'。

21樓:風落翎

先說第二點。

m % 2 自動轉換? 估計你以前是學vb 的吧。c 語言不是這樣的。m % 2 代進去的是 ascii 值。它本身就是數字當然不轉換了。

要把文字轉化成數 這麼寫 (m-'0') 2再說第一點。

c 語言中 並不需要那樣。

temp[3] 表示的 是 *(temp + 3)。 不知你能不能理解這一點。所以只要把位址傳遞過去。temp[i]引用的就是原來的陣列。

最後說一下你的程式還存在的問題:

函式宣告要放在main(){外面!

而且沒有 輸入語句!

22樓:小豬乖乖

用for傳。

for(i=0;ia[j] =temp[j];

不自動轉換就要用強制轉換。

temp[i]=(char)(m%2);

程式自己搞定。

23樓:匿名使用者

問題二不知道你說什麼,不過迴圈好像有問題。 for(int i=0;i

c語言中將字串賦值給字元陣列的問題

24樓:123楊大大

需要初始化。

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

char s[20];

char ss="hello";

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

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

而char a[ ]toyou「那是因為我們在宣告陣列變數的時候就是,為其開闢空間,並為其初始化,這樣才是符合c語言語法的。而上面的都是不符合語法的。

c關於字元陣列的初始化和賦值問題

只有在定義的同時這樣 a 20 what for 賦值才行,其他不行,這是c語言規定的 要先定義然後再在其他地方賦值的話,就只能乙個乙個元素單獨賦值,不過要是想達到同樣的效果 類似a 20 what for 對於字串陣列,可以用庫函式strcpy 函式賦值,其他的話,你可以自己寫函式給他們賦初值!初...

vb字串陣列賦值問題,VB字串和字元陣列的賦值問題

dim strarray strarray array 姓名 性別 年齡 dim string 20 string 1 姓名 string 2 性別 string 3 年齡 與普通陣列賦值有什麼區別嗎?工程裡建立乙個模組,然後貼上下邊 public type a sname as string 6 ...

C字元陣列和字串陣列,在C中字元陣列和字串有什麼區別

實際上,字元陣列和普通陣列一樣,沒有本質區別。請大家注意陣列型別的含義 資料型別指的是陣列所包含的元素的型別,而不是陣列名的型別,陣列名永遠是乙個指標,指向第乙個元素的位址,即陣列首位址。字元陣列的每個元素都是char型別,整型陣列的每個元素都是int型別。scanf 和 printf 函式有一種格...