c語言初始化字元陣列bug

2021-09-24 01:19:13 字數 2393 閱讀 6247

#include

#include

#include

using namespace std;

map<

char

,int

> mp;

void

cbchar

(char

* cc,

int* bb,string &a)

int l=0;

for(map<

char

,int

>

::iterator it = mp.

begin()

;it!=mp.

end(

);it++)}

intmain()

for(

int i=

0;c[i]

;++i)

cout<' '<' '

int i=

0;c[i]

;++i)

}

輸入qqqqq

輸出:

qqqqq

3130 q:5:

0 i:

4754240

這就很奇葩了,我那個陣列c怎麼是三個元素???

然後我進行測試:

#include

#include

#include

using namespace std;

map<

char

,int

> mp;

void

cbchar

(char

* cc,

int* bb,string &a)

int l=0;

cout<<

"map的大小:"

; cout

char

,int

>

::iterator it = mp.

begin()

;it!=mp.

end(

);it++

)int len=

strlen

(cc)

; cout<<

"cc陣列裡面的字元個數:"

int i=

0;i++i)

}int

main()

}/*qqqqq

c陣列之前的元素個數:3

map的大小:1

map裡面的值:q:5

map遍歷次數:1

cc陣列裡面的字元個數:3

0:q1:

2:pq:5

?*/

原來直接定義乙個字元陣列,但是不賦值,它裡面還有元素,並不是說裡面直接就是乙個』\0』。

我這個裡面c就是初始什麼都不賦值時侯,竟然有三個元素。。。臥槽寫這麼長時間c語言,我才發現這個bug。

看來我得回爐重造了。。。

那麼解決這個bug,就是在初始化時候加個花括號。char c[100]={};

#include

#include

#include

using namespace std;

map<

char

,int

> mp;

void

cbchar

(char

* cc,

int* bb,string &a)

int l=0;

cout<<

"map的大小:"

; cout

char

,int

>

::iterator it = mp.

begin()

;it!=mp.

end(

);it++

)int len=

strlen

(cc)

; cout<<

"cc陣列裡面的字元個數:"

<}int

main()

; cout<<

"c陣列之前的元素個數:"

<<

strlen

(c)

(c,b,a)

;for

(int i=

0;c[i]

;++i)}/*

qqqqq

c陣列之前的元素個數:0

map的大小:1

map裡面的值:q:5

map遍歷次數:1

cc陣列裡面的字元個數:1

q:5*/

C語言字元陣列的初始化

1 字元陣列的定義與初始化 字元陣列的初始化,最容易理解的方式就是逐個字元賦給陣列中各元素。char str 10 即把10個字元分別賦給str 0 到str 9 10個元素 如果花括號中提供的字元個數大於陣列長度,則按語法錯誤處理 若小於陣列長度,則只將這些字元陣列中前面那些元素,其餘的元素自動定...

C語言字元陣列的初始化

1 字元陣列的定義與初始化 字元陣列的初始化,最容易理解的方式就是逐個字元賦給陣列中各元素。cpp view plain copy char str 10 即把10個字元分別賦給str 0 到str 9 10個元素 如果花括號中提供的字元個數大於陣列長度,則按語法錯誤處理 若小於陣列長度,則只將這些...

C語言字元陣列的初始化

1 字元陣列的定義與初始化 字元陣列的初始化,最容易理解的方式就是逐個字元賦給陣列中各元素。char str 10 即把10個字元分別賦給str 0 到str 9 10個元素 如果花括號中提供的字元個數大於陣列長度,則按語法錯誤處理 若小於陣列長度,則只將這些字元陣列中前面那些元素,其餘的元素自動定...