2016-12-10 2 views
0

이 코드 부분은 내가 학교에서 해결하고있는 약간의 작업입니다. 필자가해야 할 일은 oblici.txt 파일을 열고 내부 그림을 추측하는 것입니다 (10x10 필드는 # 및 - 그림 표시). 따라서 문자열 s의 크기를 계산하지 못하고 11 대신 10 개의 공간 만 할당했습니다. 문제는 그것이 2를 넘지 않을 것입니다. 음, 해결책을 찾았지만 효과가 있습니다. 그러나 이것이 왜 문제인지 파악할 수 없습니다. 왜 그것이 문제가되는지, 오버 플로우가 좋은 것은 아니라는 것을 알지만, x 안에 0을 쓰는 가능성을 제거하는 if(b>0)을 가지고있을 때 지옥에서 어떻게 0을 써야하는지 (9 대신). 내 유일한 추측은 '\ 0'... 0의 값을 가지고 있으며,이 b의 내부에 기록됩니다하지만 그건 그냥 이해가 나던 것이 었습니다 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을 사용하면 계산이 엉망이됩니다.

는 끝으로, BTW, 그것은 버그를 소개하는 정말 일반적인 방법입니다으로 주위 if, forwhile 문을 {}를 사용하지 않도록!