moon19961996
2019-04-22 20:04
采纳率: 86.7%
浏览 943

读文件写道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;

}
``注释两行报错,为什么,原理?
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

6条回答 默认 最新

  • 白色一大坨 2019-04-22 22:12
    已采纳

    char* b只是指针,需要分配空间,你试试用b = new char[20];看看能不能读取,记得结尾释放空间,delete []b;

    2 打赏 评论
  • 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的时候,就不能对它访问,否则会报内存无法读取的错误。

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

    3 打赏 评论
  • weixin_anvirzh0612 2019-04-23 18:55

    你好,a.read(b,10);这句话执行的时候,b 是空指针,没有内存空间的,故而报错。而char c[20];
    这句话表示c是指针,且指向20 字节内存首地址,故而执行a.read((char*)c,10); 不会报错。

    1 打赏 评论
  • 读在char *b里面的话,是要对b分配空间的,不然你使用的时候 它还是null
    好像是realloc和malloc函数

    打赏 评论
  • 辛潇 2019-04-22 22:00

    有一个叫字符串常量的东西存在静态内存区
    char * str1="abc";
    char *str2="abc";
    str1和str2是相等的;因为str1和str2都指向了静态内存区的字符串"abc"
    但是char str3[4]="abc";
    char str3[4]="abc";
    str3和str4是不相等的,因为他们有自己的内存空间

    也就是说你这里面的b是没有分配的内存的,
    而d则是将静态内存区的字符串"abc"的地址赋给d了

    打赏 评论
  • dabocaiqq 2019-04-23 00:11

    d =(char*) "abc";

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

    打赏 评论

相关推荐 更多相似问题