鱼C论坛

 找回密码
 立即注册
查看: 3493|回复: 2

记事本中读取多行文本内容的问题

[复制链接]
发表于 2012-2-22 16:42:13 | 显示全部楼层 |阅读模式
9鱼币
FILE *fp=fopen(szFile,"r");               //打开一个文本文件,在此之前,已经获得文件名称
char strT[200000];                          //声明一个字符数组,用来存放文本文件的内容

char t[2];                                        //这两行就让我郁闷了,实在看不出它的用处,但若注释掉,在下面的 “IDC_RICHEDIT1” 控件里就无法显示文本了
wsprintf(t,"%i%i",'\r','\n');

char *str=(char*)malloc(sizeof(char)*80);  //以下5行实现把文本内容读取到字符数组strT里
while(fgets(str,40,fp))
{
        strcat(strT,str);
}

SetDlgItemText(hwnd,IDC_RICHEDIT1,strT); //把文本内容显示到 “IDC_RICHEDIT1” 控件里。

这段代码是我从网上拷贝的,问题在注释里,求高手帮忙解惑!!!!!

最佳答案

查看完整内容

可以删,不过要把char strT[200000]改为:char strT[200000]={0}; 因为没有初始化数组strT所以数组里元素都是随机值。所以第一次 strcat(strT,str);的时候会寻找strT里的'\0'找不到程序就爆了。至于加了那两行后,我猜是windows做了什么手脚使得strT数组的首元素变为\0了,但这显然不是一个通用的做法。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-2-22 16:42:14 | 显示全部楼层
可以删,不过要把char strT[200000]改为:char strT[200000]={0};
因为没有初始化数组strT所以数组里元素都是随机值。所以第一次 strcat(strT,str);的时候会寻找strT里的'\0'找不到程序就爆了。至于加了那两行后,我猜是windows做了什么手脚使得strT数组的首元素变为\0了,但这显然不是一个通用的做法。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-2-22 19:38:02 | 显示全部楼层
wsprintf自动加个'\0'
加的位置正好是strt的地址..
等于越界了

wsprintf(t,"%i","i",'\r','\n')
'\r' '\n'可以随便写

你数组不初始化的问题 初始化0不用什么wsprintf
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-11 13:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表