CFile::Read()函数的问题

都知道这个函数的第一个参数是缓冲区那么缓冲区起码该够大吧?但是我这样char*pString=newchar;CStringString;files.Read(pStri... 都知道这个函数的第一个参数是缓冲区 那么 缓冲区起码该够大吧? 但是我这样
char *pString=new char;
CString String;
files.Read(pString,9);
String=pString;
CDC *pDC=GetDC();
pDC->TextOutW(0,0,String,9);
一段代码 竟然可以正常的读取 这是为什么呢? 难道是像字符串指针一样? “指针指向读出来的字符串?” 而且 如果把pString指向一个char变量 也不能正确运行 单单new分配内存可以 这为什么呢? 还有 Read()函数内部是怎么把读出来的数据放到我们提供的缓冲区的呢? 是不是一个字符一个字符的拷贝? 那和字符串指针有什么区别? 那不用初始化的指针不也可以用了吗?
Read()函数内部是怎么把读出来的数据放到我们提供的缓冲区的呢? 是不是一个字符一个字符的拷贝? 那和字符串指针有什么区别? 那不用初始化的指针不也可以用了吗?
展开
 我来答
魔高丈
2009-02-02 · TA获得超过9506个赞
知道大有可为答主
回答量:2066
采纳率:0%
帮助的人:3476万
展开全部
files.Read(pString,9);
Read只是向PString指向的地址的连续9个字节的空间内存储读到的数据,并不管你为这个指针分配了多少空间!

是可以读取字符的,而且在显示字符串时是以'\0'作为字符串结束标志的,同样也是不管这个char的指针分配了多大的空间,所以也是可以正常显示的。

但是,在一个程序中还有其他很多变量的,而其他变量的地址可能就会在pString指向的地址的后面,这样你在files.Read(pString,9);后,这些变量的内容就都改变了。所以再执行其他操作时就会发生很多未知错误。
而如果pString指向的地址的后面空间被一些系统程序使用的话,那么执行完Read操作后是会造成系统崩溃的。

类似的其他很多关于指针的操作都是这样的,所以在使用指针时要特别注意这些问题。否则出现了错误,也是很难找到为什么会出错的。
成功还宝贵灬宝贝I
2009-02-03 · TA获得超过280个赞
知道答主
回答量:98
采纳率:0%
帮助的人:0
展开全部
是可以正常读取的 因为pString这个指针指向一个字符的地址后
Read讲这个文件的前九个字符赋给以这个字符为首地址的后面九个空间
因为不知道这后面八个内存块有没有用途 所以这样做这次可以 下次就不一定能成功勒
所以建议不要这么做
如果有兴趣 加我百度号 我们可以讨论
pengxuewanp
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
chihpin
2009-02-02 · TA获得超过2627个赞
知道大有可为答主
回答量:4903
采纳率:0%
帮助的人:4181万
展开全部
char * 就是 string

但是你用new char ,只分配了一字节空间,能成功运行,不代表他是正常的
Read()后,自动一直向高地址填充数据
你又声明了一个CString 指向了 pString的地址,也就是那个串的首地址
所以能正常输出,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式