关于数组“烫烫烫。。。”的问题

Chris_Ann 2014-12-21 09:56:50
#include<stdio.h>
#include<stdlib.h>

int main()
{
char letter[80];
int i=0;

FILE *infile;

infile=fopen("Das.txt","r");

for(i=0;i<=5;i++)
{
letter[i]=fgetc(infile);
}


printf("%s",letter);
return 0;

}

最近在学数据文件那块,我往工作区间哪里放了一个Das.txt的文件,里面有几个字母。
然后用这个程序运行,发现出现一堆输出那6个字符,再加上烫烫烫.。。。。。
好像是什么数组没有初始化的问题吗? 我如果把那个数组声明那改成 char letter[80]={0} 问题就消失了。 怎么回事?
...全文
421 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
a138762698828 2014-12-22
  • 打赏
  • 举报
回复
字符数组不能这样赋值,他是个常量,不能做左值!
赵4老师 2014-12-22
  • 打赏
  • 举报
回复
小心驶得万年船:
#include<stdio.h>
int main()
{
    char letter[80];
    int i=0,c;

    FILE *infile;

    infile=fopen("Das.txt","r");
    if (NULL==infile) return 1;
    for (i=0;i<=5;i++)
    {
        c=fgetc(infile);
        if (EOF==c) break;
        letter[i]=(char)c;
    }
    fclose(infile);

    printf("[%.*s]",i,letter);
    return 0;
 
}
mxway 2014-12-22
  • 打赏
  • 举报
回复
你的数组是定义在函数内,如果没有手动初始化的话,vs编译器会自动将每个内存单初始化为0xcc。由于内存单元的最高为1,所以用两个内存单元表示一个汉字。0xcc oxcc就是汉字烫。打印的时候程序会从你指定的内存单元开始打印。直到找到一个内单元的值为0,才会停止。而char letter[80]={0}编译器保证从letter第一个单元开始到第80个单元的内存值都是0
fly_dragon_fly 2014-12-22
  • 打赏
  • 举报
回复

char letter[80] ={0};
或
letter[6] =0;
Lu~ 2014-12-22
  • 打赏
  • 举报
回复
记得老师说过,数组越界会出现这个
FightForProgrammer 2014-12-21
  • 打赏
  • 举报
回复
输出了6个字符,它们组成的字符数组没有以'\0'结尾,因此系统没有检测到(因为字符串以‘\0’结尾),于是乎输出6个字符后继续输出咯,而你又没有设置结束符‘\0’,就打印了内存的某个地址。。。。一般来说这个地址转移过来就是烫,具体来源我忘记了,你可以去搜。。 至于你后面初始化了,因为有了结束符,检测到了

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧