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

不知道数据时什么原因溢出了解决方法

2013-04-05 
不知道数据时什么原因溢出了# includestdio.h# includestdlib.hvoid main(){FILE *hpchar name[4][20

不知道数据时什么原因溢出了
# include<stdio.h>
# include<stdlib.h>
void main()
{
FILE *hp;
char name[4][20];
int i;
    if((hp=fopen("诗","r"))==NULL)
{
printf("error");
exit(0);
}
     while(fgets(name[i],20,hp)!=NULL)
{
    
printf("%s",name[i]);
i++;
}
fclose(hp);
}
那个诗里的内容是:滚滚长江东逝水
浪花淘尽英雄
是非成败转头空
青山依旧在
如果我讲上面的二维数组改成char name【4】【40】就可以
[解决办法]
utf8编码的话一个汉字3字节,7个字加上末尾\0就需要22个字节存储,20不够。
[解决办法]
还有,你的i也没有赋初值,在有些编译器里能过,但这不是正确的方法
虽然有四句或更多,便你只是读出来显示一下,不作处理,完全不必要用4个串接收,一个大点的串就可以,高效重复使用内存:

#include <stdio.h>
#include <stdlib.h>
void main()
{
FILE *hp;
char name[4*20];
//int i;
if((hp=fopen("诗","r"))==NULL)
{
printf("error");
exit(0);
}
while(fgets(name,4*20,hp)!=NULL)
{
printf("%s",name);
i++;
}
fclose(hp);
}

[解决办法]
严重错误:i未初始化为0;另外字符数组最好也初始化,以免没有结束符,尾部出现乱码的情况

热点排行