c语言初始化字符数组bug

#include<iostream>
#include<map>
#include<cstring>
using namespace std;
map<char,int> mp;
void cbchar(char* cc,int* bb,string &a){
	for(int i=0;a[i];++i){
		mp[a[i]]++;
	}
	int l=0;
	for(map<char,int>::iterator it = mp.begin();it!=mp.end();it++){
	//	cout<<it->first<<':';
	//	cout<<it->second<<endl;
		bb[l]=it->second;
		cc[l]=it->first;
		l++;
	}
}

int main(){
	string a;
	cin>>a;
	int b[100];
	char c[100]; 
	cbchar(c,b,a);
	int lengthc=strlen(c); 
	int lengthb=0,lengthd=0;
	for(int i=0;b[i];++i){
		lengthb++;
	}
	for(int i=0;c[i];++i){
		lengthd++;
	}
	cout<<lengthc<<' '<<lengthb<<' '<<lengthd<<endl;
	for(int i=0;c[i];++i){
		cout<<c[i]<<':'<<b[i]<<endl;
	}
	
} 

输入qqqqq
输出:

  qqqqq
    3 1 3
    0
    q:5
    :0
    I:4754240

这就很奇葩了,我那个数组c怎么是三个元素???
然后我进行测试:

#include<iostream>
#include<map>
#include<cstring>
using namespace std;
map<char,int> mp;
void cbchar(char* cc,int* bb,string &a){
	
	for(int i=0;a[i];++i){
		mp[a[i]]++;
	}
	int l=0;
	cout<<"map的大小:"; 
	cout<<mp.size()<<endl;
	for(map<char,int>::iterator it = mp.begin();it!=mp.end();it++){
		cout<<"map里面的值:" ;
		cout<<it->first<<':';
		cout<<it->second<<endl;
		bb[l]=it->second;
		cc[l]=it->first;
		l++;
		cout<<"map遍历次数:"<<l<<endl;
	}
	int len=strlen(cc);
	cout<<"cc数组里面的字符个数:"<<len<<endl;
	for(int i=0;i<len;++i){
		cout<<i<<":" <<cc[i]<<endl;
	}
}

int main(){
	string a;
	cin>>a;
	int b[100];
	char c[100]; 
	cout<<"c数组之前的元素个数:"<<strlen(c)<<endl; 
	cbchar(c,b,a);
	
	for(int i=0;c[i];++i){
		cout<<c[i]<<':'<<b[i]<<endl;
	}
	
} 
/*
qqqqq
c数组之前的元素个数:3
map的大小:1
map里面的值:q:5
map遍历次数:1
cc数组里面的字符个数:3
0:q
1:
2:p
q:5
?
*/

原来直接定义一个字符数组,但是不赋值,它里面还有元素,并不是说里面直接就是一个’\0’。
我这个里面c就是初始什么都不赋值时侯,竟然有三个元素。。。卧槽写这么长时间c语言,我才发现这个bug。
看来我得回炉重造了。。。

那么解决这个bug,就是在初始化时候加个花括号。char c[100]={};

#include<iostream>
#include<map>
#include<cstring>
using namespace std;
map<char,int> mp;
void cbchar(char* cc,int* bb,string &a){
	
	for(int i=0;a[i];++i){
		mp[a[i]]++;
	}
	int l=0;
	cout<<"map的大小:"; 
	cout<<mp.size()<<endl;
	for(map<char,int>::iterator it = mp.begin();it!=mp.end();it++){
		cout<<"map里面的值:" ;
		cout<<it->first<<':';
		cout<<it->second<<endl;
		bb[l]=it->second;
		cc[l]=it->first;
		l++;
		cout<<"map遍历次数:"<<l<<endl;
	}
	int len=strlen(cc);
	cout<<"cc数组里面的字符个数:"<<len<<endl;
}

int main(){
	string a;
	cin>>a;
	int b[100];
	char c[100]={}; 
	cout<<"c数组之前的元素个数:"<<strlen(c)<<endl; 
	cbchar(c,b,a);
	
	for(int i=0;c[i];++i){
		cout<<c[i]<<':'<<b[i]<<endl;
	}
	
} 
/*
qqqqq
c数组之前的元素个数:0
map的大小:1
map里面的值:q:5
map遍历次数:1
cc数组里面的字符个数:1
q:5
*/
发布了218 篇原创文章 · 获赞 131 · 访问量 13万+

猜你喜欢

转载自blog.csdn.net/qq_40828914/article/details/90713885
今日推荐