c語言中char型別陣列的輸出問題 輸出時為何需要 符?

2025-03-19 19:05:17 字數 3592 閱讀 2636

1樓:帳號已登出

char a[20];

那麼a表示字元陣列的起始位址,它和&a[0]是乙個意思。

使用printf()輸出字元陣列a的內容:

printf("%s", a);

就等同於printf("%s", a[0]);

輸出的時候用:

int i = 0;

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

printf("a[%d]=%c", i, a[i]);

防止緩衝區溢位可以用這樣的:

fgets(a, sizeof(a), stdin);

a[strlen(a) -1] =0';

2樓:吉祥二進位

在c語言中陣列的名字即陣列的起始陸明擾地槐孫址,也是陣列第乙個元素的位址。因此,假設有乙個char型別的陣列a表示成如下**:

char a[20];

那麼a表示字元陣列的起始位址,它和&a[0]是乙個意思。

使用printf()輸出字元陣列a的內容:

printf("%s", a);

它就等同於早旦。

printf("%s", a[0]);

3樓:知知學店

你前面輸出格式脊胡為"%s"即字御罩符串型別,後面對第乙個字元s[0]加&

表示為取得整個字串的首位址,再以字串的格式肯定讀出的是。

整個字串,如果你櫻拆攔把"%s"改為"%c"把&去掉就會輸出首字元,如果只把&去掉,那麼你是以字串的格式輸出首字元,格式不對當然是亂碼了。

4樓:網友

當然,想列印一字串,也通過這種方式就可以獲得。

為什麼呢?因為c語言內部的機制表明: 它對字串的處理是,遇到'\0',其實也就是0,就表明字串結束了,所以呢,不論這個指標在什麼位乎睜扮置都沒關係,編譯器會依次向早明後尋找字元,知道遇到null(或0或'\0')就算字串結束了。

5樓:惠企百科

char a[20];

那麼a表示字元陣列的起始位址,它和&a[0]是乙個意思。

使用printf()輸出字元陣列a的內容:

printf("%s", a);

就等同於printf("%s", a[0]);

輸出的時候用:

int i = 0;

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

printf("a[%d]=%c", i, a[i]);

防止緩衝區溢位可以用這樣的:

fgets(a, sizeof(a), stdin);

a[strlen(a) -1] =0';

c語言中char型別的資料輸入和輸出時怎麼控制啊?

6樓:刺友互

1、首先開啟microsoft visual c++軟體,單擊「檔案」選單->「新建」,新建乙個檔案,檔名字尾為。c。

2、新建好檔案後,輸入如下內容。

3、然後我們在之間輸入函式的內容,我們先定義變數c1,變數的型別為char,字元型。

4、用printf語句進行輸出。

5、當內容輸入好後,我們點選圖中工具按鈕,對程式進行檢測,如果沒有錯誤,會得到下圖所示效果。

6、檢測到沒有錯誤後,點選執行(紅色感嘆號)。

7、彈出的黑色視窗中為最終結果,可以看到大寫字母「a」顯示在上面。

7樓:網友

char型別資料在輸入時,用scanf()函式輸入時,格式控制串用%c,但由於輸入的方式不同,**要採用不同的語句進行控制。

輸入乙個字元,按一次回車。

#include

void main()

連續輸入字元,直到回車結束(這時,不需要加過濾操作)#include

void main()

使用者在鍵盤輸入時,所有的按鍵不會直接反應到程式變數中,而是先儲存到輸入快取區中,程式在讀取資料時,是從輸入快取中讀取。所有的按鍵都會對映成相應的字元,如:回車、空格等都是有效的字元,所以,在讀字元時,程式不會自動忽略它們,如果需要忽略,需要進行程式**控制。

c++ 輸出char問題

8樓:網友

如果你寫的是。

cout<('a'+'c')/2《輸出-62我並不覺得奇怪。

因為'a'的ascii碼是65,'c'是67。相加是132。

a'+'c'的「結果型別」是int,因此它的十六進位是0x00000084,最高位是0表示正數!(你可以求sizeof('a'+'c')驗證一下,是4,int的大小)

3. static_case('a'+'c')相當於static_case(132)。

4. (char)132的十六進位是0x84,二進位是1000 0100,最高位符號位是1表示這是個負數!

5. 用8位補碼解析0x84,得到的結果是-62!

用下面的告訴你結果:

#include

using namespace std;

int main()

輸出:'a'+'c') = 132 = 0x00000084

int)(char)('a'+'c') = -124 = 0xffffff84

最後再補充一句,為了不讓'a'+'c'的結果「溢位」,導致char('a'+'c')/2得到負數,更好的辦法是char('a') +char('c'-'a')/2。

這兩種做法雖然數學上是等價的,但是第一種方法的「中間計算過程」存在「溢位」,導致結果不是想要的。

ps:第二種做法在做二分查詢和快速排序的時候也都會用到!

9樓:網友

我這輸出b,也許就是你編譯器有bug

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

10樓:草迎風

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

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',當輸出時候就正常輸出。

11樓:一崽

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

char *name;

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

scanfprintf

c語言char相關問題,c語言中char 是什麼意思

s輸出bai時需要是指標du 或陣列名,zhi比如說 include int main 而你上面daochar a a program 這種賦內值本身是非法的。容 c語言中char 是什麼意思?char 是宣告一 個字元型別的指標。比如 chat y 就是宣告一個指標y,這個指標指向的地址上只能存放...

c語言中char是什麼意思,C語言中char 是什麼意思? 和char 有什麼區別呀

char是容納單字元 的一種基本資料型別,不能儲存漢字,一個漢字佔2位元組 儲存字元回串用string,其實string就是一個答char的陣列,不過它當中的元素多一個 0 在陣列的最後,表示結束 例如字串abcd char a 是等價的。而且一個變數只能存一個字元 如果要存多個則用string 字...

如何在c語言中以陣列指標作為形參輸出陣列

senddata 2 0,0和 0 都等於0,因此 info 0 會在k 2時不成立 建議 1.另外傳一個參數列示命令的長度 2 另外尋找一個一定不會在正常的命令中出現的數字作為結束符而不是正常命令中間就可能出現的0 另外有一個優化建議是吧info null的判斷提前做而不是和for攪在一起,因為i...