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只是指针,需要分配空间,你试试用b = new char[20];看看能不能读取,记得结尾释放空间,delete []b;
你好,a.read(b,10);这句话执行的时候,b 是空指针,没有内存空间的,故而报错。而char c[20];
这句话表示c是指针,且指向20 字节内存首地址,故而执行a.read((char*)c,10); 不会报错。
读在char *b里面的话,是要对b分配空间的,不然你使用的时候 它还是null
好像是realloc和malloc函数
有一个叫字符串常量的东西存在静态内存区
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了
char* b只是指针,需要分配空间
b指向c char*b=&c[]应该就可以了
注释推荐用//
分配空间后读取
b、d类型为指针,需要分配地址,而不能为N∪LL
char* b=NULL; 需要指向具体实际内容才能使用
char* b只是指针,需要分配空间,你试试用b = new char[20];看看能不能读取,记得结尾释放空间,delete []b;