为什么读文件的时候,read读出来的内容不能放进char*类型,但是可以放进char【】?

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=NULL;

char c[20];

a.seekp(0, ios::beg);

因为你b是NULL,要指向c才可以

char c[20];

char* b=&c[0];

a.seekp(0, ios::beg);

a.read(b,10);

当指针NULL的时候,就不能对它访问,否则会报内存无法读取的错误。

如果我的回答让你满意,请采纳下,谢谢

d =(char*) "abc";

这个地方abc是常量,是不能修改的

char * b只是一个指针,并没有指向一个内存空间,如果读数据,就会将数据读进地址0所对应的内存。而地址0对应的内存是被
操作系统保护的,普通用户并不能读写。
要不出错,先要给b分配内存。
C语言有多种内存分配方法,最常见的是在堆栈中分配,使用非常简单:
char b[20];
或是:
char x[20];
char * b=x;
这种分配方法无需释放,是最方便的。但是最好不要分配超过2M的大小。
因为windows默认有这个限制。当然可以通过修改编译系统改大,但是,
如果需要更大,我们一般采用new的方法,或是malloc或是自定义堆等等
很多方法都可以。