C++语言fread函数读出来的内容为什么和原文不一样,以下是源码和运行图

#include<stdio.h>#include<cstring>#include<afx.h>#include"exercise.h"读的文件是我自己创建的一个文本文... #include<stdio.h>#include<cstring>#include<afx.h>#include"exercise.h"读的文件是我自己创建的一个文本文档,然后随便写了一句话,然而读出来却和原文大有区别,#define MAX_LEN 128 //定义通用长度宏char* readfile(char * filepath) { char caption[MAX_LEN];//初始化字符组 memset(caption,0,MAX_LEN); FILE *filepointer = fopen(filepath, "r+b");//打开文件 if (filepointer == NULL) {//判断文件是否正确打开 printf("FILE NO FOUND");//如果没有正确打开 } else {//如果正确打开 fread(caption,sizeof(char),strlen(caption),filepointer);//读取文件内容 } fclose(filepointer);//关闭文件 return caption;//返回读取的内容}void main() { char* string = readfile("F:\\1.txt"); printf(string); getchar();} 展开
 我来答
Aupryyyyyyyyyy
2016-09-02 · TA获得超过1636个赞
知道大有可为答主
回答量:1574
采纳率:53%
帮助的人:960万
展开全部
debug 模式下看到字符串输出 “烫”,说明读取到了不应该读取的内存。。。
当 readfile 函数返回的时候,caption 这个数组已经被释放掉了。。。
你可以改用 malloc 在堆里分配内存,但这样的话就要求调用者要手动把它 free 掉;这也是为什么 C 语言的很多函数如果要输出字符串,一般都是弄一个指针参数,由调用者提供内存
追问
意思就是改局部变量为堆指针变量,然后用于返回,函数结束以后在手动释放对吧
追答
嗯嗯
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式