1.typedef struct child
{
string name;
struct child* next;
};
child* head;
head = (child*)malloc(sizeof(child));
cin>>head->name;
0x00c42386处有未经处理的异常:oxc0000005:写入位置oxcdcdcd时发生访问冲突。0xC0000005 表示使用了未创建(未分配内存空间)的变量或对象。0xC0000005错误通常是由于内存访问错误引起,可能是你的程序有错误的指针操作或者访问了空对象,内存未初始化。child* head;未初始化变量啊string name;这个是一个class,你分配内存之后没有对head做初始化,只有在指针,既分配了空间,又初始化以后,才可以用。
#include <iostream>
using namespace std;
class sss{
public:
sss(){
cout<<'s';
}
};
int main(){
sss s1;
return 0;
}
using namespace std;
class sss{
public:
sss(){
cout<<'s';
}
};
int main(){
sss s1;
return 0;
}
譬如这段代码,sss s1;这句话就是定义变量,在栈空间为s1分配内存并初始化class是可以定义方法的……需要初始化的……struct相当于就是一块内存。string是一个class,是需要进行初始化的然后你把它放在struct里面,malloc只是为他分配了内存,但是没有初始化所以string里面的东西全是乱的,可能出各种奇怪的问题就是说,class里面放class或者struct里面放struct,class里面放struct也有但不多。这个错误犯了好几遍了。
可以这样用:
typedef struct child
{
char name[20];
struct child* next;
};
child* head;
child* tail;
head = (child*)malloc( sizeof(child));
cin>> head->name;
2.c++中关于字符串的读入——cin、getline、get、gtes(查询+思考+总结)
1、cin读入一个字符:
char c;cin>>c;
2、cin读入一个字符串:
char s[10];cin >> s;(c风格字符串)
string str;cin >> str;(c++的string)
3、cin.get()读入一个字符:
char c;c=cin.get();
4、cin.get()读入一个字符串
char s[10];cin.get(s,10);
5、cin.getline()读入字符串(c风格和string都行,只要要是char *)
cin.getline(s,5)//默认回车
空格不行
//cin流
6、getline(cin,str)
str为string,可以读空格!
char c;cin>>c;
2、cin读入一个字符串:
char s[10];cin >> s;(c风格字符串)
string str;cin >> str;(c++的string)
3、cin.get()读入一个字符:
char c;c=cin.get();
4、cin.get()读入一个字符串
char s[10];cin.get(s,10);
5、cin.getline()读入字符串(c风格和string都行,只要要是char *)
cin.getline(s,5)//默认回车
空格不行
//cin流
6、getline(cin,str)
str为string,可以读空格!
3.文件
ifstream fin;
fin.open( "data.txt");
if(fin.bad())
{
cout<< "文?件t读??取??失???败???" <<endl;
return 0;
}
string input_str;
fin>>input_str;
fin.close();
//输出到文件
ofstream ocout;
ofstream ocout;
ocout.open( "output.txt" );
ocout<<"字??符??串??个?数?y:?o"<<str.size()<<endl;
ocout.close();
4.//递归函数
int fuc_naive_recur(int i)
{
if(i==0) return 0;
if(i==1) return 1;
return fuc_naive_recur(i-1)+fuc_naive_recur(i-2);
}
{
if(i==0) return 0;
if(i==1) return 1;
return fuc_naive_recur(i-1)+fuc_naive_recur(i-2);
}
5.//判断输入非法
- 例如判断输入的int值是否超出范围,或输入字符串等非法输入。
- int n;cin>>n;if(cin.fail())
- cout<<“输入非法!”<<endl;//例如此时输入了字符‘a’或输入的值超出了intmax。则会认为输入非法
6.读入一个文件
ifstream fin;
fin.open (filePath. c_str());
if(fin .bad())
{
cout<< "read file failed" <<endl;
return 0;
}
string input_xml = 0;
string str = 0;
while(!fin .eof())
{
getline(fin ,str);
input_xml += str ;
}
fin.close ();
//cout<<input_xml<<endl;
7.随机数,申请数组空间
随?机??生???成??5*10^6到??5*10^7个?数?y,??取??5个?测a试??集??
int main(int argc,char** argv)
{
long long N = 50000000 ;
long long i = 0;
int *myarray;
myarray = ( int*)malloc(sizeof (int)*5*N);
if(myarray == NULL)
{
cout<< "数?y组???空?间?申???请?失???败???!??" ;
return 0;
}
srand(time(NULL));
for(i = 0 ;i<N;i++)
{
myarray[i] = rand();
cout<<myarray[i]<<endl;
//Sleep(1000);
}
}
8.建立基于对话框的程序,在Dlg.cpp的OnPaint()函数中
else
{
CPaintDC dc( this);
CString straa = CString( "asdfasd");
dc.TextOut(100,200,straa);
dc.SetPixel(100,200,RGB(255,0,255));
dc.Ellipse(100, 100, 30, 30); //圆2心?坐??标???,??半??径?
CDialogEx::OnPaint();
}
9.C++类继承例子
//drawable.h文件里
class drawable{
public:
virtual void draw(){}
drawable( int len, char c):_l(len), _c(c){}
protected:
int _l;
char _c;
};
class circle:public drawable{
public:
void draw();
circle( int len, char c):drawable(len, c){}
};
class square:public drawable{
public:
void draw();
square( int len, char c):drawable(len, c){}
};
//drawable.cpp文件里
#include "drawable.h"
#include "iostream"
using namespace std;
void triangle::draw()
{
for(int i =1;i<= _l;i++)
{
for(int j=0;j<(_l+1) - i;j++)
{
cout<< " ";
}
for(int j=1;j<=i;j++)
cout<<_c<< " ";
cout<<endl;
}
}
void square::draw()
{
for(int i = 0;i<_l;i++)
{
for(int j=0;j<_l;j++)
{
cout<<_c<< " ";
}
cout<<endl;
}
}
//main函数调用
#include <iostream>
#include <string>
#include "drawable.h"
using namespace std;
int main()
{
int shap;
cout<< "请?选?择?形?状???:?o1.正y方??形? 2.三?y角?形? 3.圆2形?" ;
cin>>shap;
int len;
cout<< "请?输??入??边??长??或??者?半??径?参?数?y:?o" ;
cin>>len;
char ch;
cout<< "请?输??入??填??充?字??符??:" ;
cin>>ch;
drawable *_draw;
switch(shap)
{
case 1:
_draw = new square(len, ch);
break;
case 2:
_draw = new triangle(len, ch);
break;
case 3:
_draw = new circle(len, ch);
break;
}
_draw->draw();
return 0;
}
10.C++构造函数和运算符重载
typedef struct Matrix
{
long long a;
long long b;
long long c;
long long d;
Matrix(void):a(1),b(1),c(1),d(0){};
Matrix(const long long& aa,const long long& bb,const long long& cc,const long long &dd):
a(aa),b(bb),c(cc),d(dd){};
Matrix(const Matrix& tmp):a(tmp.a),b(tmp.b),c(tmp.c),d(tmp.d){};
Matrix operator *( Matrix& tmp)
{
long long p,q,r,t;
p = a*tmp.a+b*tmp.c;
q = a*tmp.b+b*tmp.d;
r = c*tmp.a+d*tmp.c;
t = c*tmp.b+d*tmp.d;
return Matrix(p,q,r,t);
};
}Matrix;
{
long long a;
long long b;
long long c;
long long d;
Matrix(void):a(1),b(1),c(1),d(0){};
Matrix(const long long& aa,const long long& bb,const long long& cc,const long long &dd):
a(aa),b(bb),c(cc),d(dd){};
Matrix(const Matrix& tmp):a(tmp.a),b(tmp.b),c(tmp.c),d(tmp.d){};
Matrix operator *( Matrix& tmp)
{
long long p,q,r,t;
p = a*tmp.a+b*tmp.c;
q = a*tmp.b+b*tmp.d;
r = c*tmp.a+d*tmp.c;
t = c*tmp.b+d*tmp.d;
return Matrix(p,q,r,t);
};
}Matrix;
11.C++时间函数
#include <time.h>
clock_t start,end;
start = clock();
fuc_pre_calc();
end = clock();
start = clock();
fuc_pre_calc();
end = clock();
cout<<" 使用时间:" <<(float)(end - start);
12.string字符串操作
字符串操作,如字符串分割、splitfindinsert....可以认为必考
string str = “abcde”
const char* ch = str.c_str();
13.C++中class的属性和方法,默认是private的,所以默认情况下构造函数也是private,所以是无法实例化的。
struct默认是public。
14.对于函数比如virtual void setPixel(int ,int ,int){}必须加上{},不然出现external link错误,还没发现原因,待查……
15.malloc和new的区别
malloc和free是C语言中的函数。在C语言中只能使用malloc和free;
new和delete是C++中的运算符,可执行构造函数、析构函数,返回指针;
共同点:都可以在堆上动态分配和释放内存。