C++ STL常见错误整理

版权声明:转载请注明出处,谢谢合作 https://blog.csdn.net/qq_40738840/article/details/85105978
1, 若在结构体中含有 string,使用动态申请内存时用new,不可用molloc
  • string 是类(面对对象),实例化时需调用构造函数,而molloc无法调用构造函数,因此会造成内存冲突;而new则很好的解决了这个问题
2, string 的find函数是匹配字符串,空格也算一个字符

string s;
s.find(" q ",3); //表示从地址3开始寻找字符串 空格空格q空格
s.find("q",3); //表示从地址3开始寻找字符串 q

3,getline按行读文件在fstream,string中参数区别

char ch[80];
fstream inf(filename,ios::in);
inf.getline(ch,80);//fstream中的getline,不可用string类型,无法强制转换

string s;
//inf.getline(ch,s);错误示例
//从文件或是键盘读取一行的通式
getline(inf,s);//读取一行的通式,且可用string
getline(cin,s);//键盘输入

4,文件流变量无法作为参数传递

//错误实例
void CreateRandFile(fstream outFile)
{
}
fstream outFile("a.dat",ios::binary | ios::out);//无法作为函数参数

CreateRandFile(outFile);//立刻报错,因为与库中冲突
//其实完全没必要使用outFile做函数参数,因为outFile只是一把临时的钥匙,
//你随时随地都可以申请一把,所以在函数内部申请一把效果也是一样的
//可把文件看做一个全局存储数组,所以在任意位置均可打开它

5,文件流使用完及得关闭,反复读写需重定位读写指针

fstream file("a.txt",ios::in);//以只读、文本方式,打开文件
file.seekg(ios::beg);//读指针重定位,回到起始点
file.seekp(ios::beg);//写指针重定位,回到起始点
file.close();//关闭,下次再打开时读写指针均回到起点

6,字符与ASCII码转换

字符–》ASCII

char ch = '?';
int a;
a = ch;//自动转换
cout<<ch-'\0'//计算与第一个字符的差值
cout<<a;//这两种方式均可计算出字符的ASCII码

ASCII–》字符

char ch;
int a = 43;
ch = a;//自动转换
cout<<ch;

数字字符-》整型数字

char ch = '5';
int a;
a = ch -'0';//与字符0取差

7,哈夫曼解码时对于中英文输入有差别的字符只支持英文,中文一输入就报错,并输出‘?’

8 二进制文件读写不可用string

string s = {"2134"};
char ch[5] = {"2134"};
fstream inFile("a.txt",ios::in|ios::binary);
inFile.read((char*)&s,sizeof(s));//一定报错,string是动态内存管理
inFile.read((char*)ch,5*sizeof(char));//字符数组是可以的

9 字符数组末尾加 ‘\0’

不加的话无结束标记,输出都一样

10 文件末尾多读取一次解决办法

模板一致,都是在循环中添加一个读取是否成功判断,若失败,立即跳出循环
c语言读取

字符读取

	FILE *fid = fopen("c文件读写.cpp","r");
	if(fid == NULL)cout<<"file open fail!"<<endl;
	//========字符读取==============
	while(!feof(fid))
	{
		char ch = fgetc(fid);
		cout<<ch;
	}

按行读取

//===============按行读取=========================
/*	错误实例
while(!feof(fid))最后一个字符多读一次 
	{
		char line[1024];
		fgets(line,1023,fid);
		cout<<line;
	}
*/	
	while(true)成功 
	{
		char line[1024];
		fgets(line,1023,fid);
		if(feof(fid))break;//判断
		cout<<line;
	} 

c++读取

字符读取

扫描二维码关注公众号,回复: 4879740 查看本文章
fstream inFile("a.txt",ios::in);
char ch;
while(true)
{
	inFile>>ch;
	if(!inFile)break;
	cout<<ch;
}

按行读取

string s;
while(true)
{
	getline(inFile,s);
	if(!inFile)break;
	cout<<s;
}

猜你喜欢

转载自blog.csdn.net/qq_40738840/article/details/85105978