2016-12-10 11 views
0

このコードの部分は、私が学校で解決していたちょっとした作業です。私がしなければならないのは、oblici.txtファイルを開いて、数字を内部に推測することです(10x10のフィールドは#と#で構成されています)。したがって、文字列sのサイズを計算しなかったため、11の代わりに10個のスペースしか割り当てられませんでした。問題は、それは2を超えることはありません。まあ、私は解決策を見つけましたが(11)、それは問題ありません。なぜそれが問題なのでしょうか?オーバーフローは良いことではありませんが、xの中に0を書き込む可能性をなくすif(b>0)を持っていると、地獄でどのように0(9の代わりに)を書くことができますか?私の唯一の推測では、 '\ 0' ... 0の値を持っており、それがbの内側に書き込まれますが、それだけで意味をなさないdoesntのことだった Cのメモリオーバーフローの混乱

#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

答えて

3

改行(\n)が各行の末尾にあるため、行ごとに合計11文字です。 10を使うと計算が乱れる。それはバグを導入する、本当に一般的な方法であるとして、先端として

、ところで、{}周りifforwhileステートメントを使用していない避けます!