首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

编写记事本的换行有关问题

2012-05-24 
编写记事本的换行问题。刚才用了下面的代码, 为什么缺少红色的代码,不对,后面的代码又没有用它,百思不得其

编写记事本的换行问题。
刚才用了下面的代码, 为什么缺少红色的代码,不对,后面的代码又没有用它,百思不得其解.
  switch(id)
  {
  case ID_MENUITEMOPEN:
{
if (GetOpenFileName(&ofn))
{
FILE *fp= fopen(szFile,"r");
fp=fopen(szFile,"r");
int flag=0;
char strT[200000];
char t[2];
wsprintf(t,"%i%i",'\r','\n');
char *str=(char*)malloc(sizeof(char)*80);
while(fgets(str,40,fp))
{

strcat(strT,str);
}
SetDlgItemText(hwnd,IDC_EDIT1,strT);
free(str);
}

}
  break;
  default:
break;
  }

[解决办法]
本生这个代码就有问题,%i等同于%d,运行这个结果t中的内容变为"1310",加上字符串结束符,应该有5个字节,当这里指定义了2个字节。
char t[2];
wsprintf(t,"%i%i",'\r','\n');
 

看来比较合理的解释是,strT需要加上一个特殊的后缀1310才能工作,数组t定义在strT的后面,正好完成了这个需要。
char strT[200000];
char t[2];
 
另外,编译器不保证单个变量的地址是相邻的,这种写法是极其错误的,即使能工作,也不能说明这种写法是真确的,早晚会遇到程序崩溃的风险。

[解决办法]
strT需要做初始化,再strcat
strT[0] = '\0';
while(fgets(str,40,fp))
{

strcat(strT,str);
}
[解决办法]
t内存应该分配大点

热点排行