int main()
{
fstream a("newpack",ios::out|ios::binary|ios::in);
a.write("abcdefghi",10);
char* b=NULL;
char c[20];
a.seekp(0, ios::beg);
/*a.read(b,10);*/
a.read((char*)c,10);
/*cout << b << endl;*/
cout << c << endl;
char *d=NULL;
d =(char*) "abc";
cout << d;
}
注释的两行不注释会报错
char * b只是一个指针,并没有指向一个内存空间,如果读数据,就会将数据读进地址0所对应的内存。而地址0对应的内存是被
操作系统保护的,普通用户并不能读写。
要不出错,先要给b分配内存。
C语言有多种内存分配方法,最常见的是在堆栈中分配,使用非常简单:
char b[20];
或是:
char x[20];
char * b=x;
这种分配方法无需释放,是最方便的。但是最好不要分配超过2M的大小。
因为windows默认有这个限制。当然可以通过修改编译系统改大,但是,
如果需要更大,我们一般采用new的方法,或是malloc或是自定义堆等等
很多方法都可以。