C中的内存溢出混乱

时间:2016-12-10 12:58:12

标签: c arrays string memory overflow

这部分代码只是我在学校解决的一项任务。我应该做的只是打开文件oblici.txt并猜测里面的数字(10x10字段由#和 - 显示图)。所以,我想念字符串s的大小,而不是11我只分配了10个空格。问题是,它不会超过2.好吧,我找到了一个解决方案(s [11]并且它有效)但是无法弄清楚为什么这是一个问题。不仅仅是为什么它是一个问题,我知道溢出并不是一件好事,但是如果我有if(b>0)这样的话可以写出0(而不是9),这样可以消除在数组中写入0的可能性x。我唯一的猜测是'\ 0'的值为0,它写在b内但是没有意义......

#include <stdio.h>
#include <stdlib.h>

int main()
{
    FILE *fp=NULL;
    int x[10],i,j=0,b=0;
    char s[10];
    fp=fopen("c:\\temp\\oblici.txt","r");
    if (fp==NULL)
        exit(1);
    while(fscanf(fp,"%s",s)!=EOF){
        for(i=0;i<10;i++)
            if(s[i]=='-')
                b++;
        if(b>0)
            x[j++]=b;
        b=0;
    }
    for(i=0;i<j;i++)
        printf("%d ",x[i]);
    fclose(fp);
}

oblici.txt在哪里:

enter image description here

1 个答案:

答案 0 :(得分:3)

这是因为每行末尾都有换行符(\n),因此每行总共有11个字符。使用10次搞砸计算。

作为提示,顺便说一句,请避免在{}iffor语句周围使用while,因为这是引入错误的一种非常常见的方法!