2014-02-23 3 views
-1

나는 학교에서 바이트와 문자로 메모리를 인쇄해야하는 프로그램을 만들어야한다. 문제는 바이트 스트림이 인쇄하는 동안 문자 스트림이 인쇄를 멈추지 않는 LINE_WIDTH의 배수가 아닌 값을 입력 할 때입니다. 나는 두 가지 방법으로 동일한 방법을 사용했으나 왜 효과가 없는지 모르겠습니다. 누구나 아이디어가 있습니까? 프로그램이 예정대로 멈추지 않고 어떻게 해결합니까?

코드이다

void output(long int *sA, int*dSz) 
{ 
    int i = 0; 
    while(abs(i)<abs(*dSz)) 
    { 
     unsigned char* address = (unsigned char*)(*sA); 
     if(*dSz>0) 
     { 
      printf("\n%#lx\t",(*sA+i)); 
      for(int a=0;a<LINE_WIDTH;a++) 
      { 
       if(i==*dSz) 
       { 
        printf(" "); 
       } 
       else 
       { 
        printf("%.2X ",toupper(address[i])); 
        i++; 
       } 
      } 
      i=i-LINE_WIDTH; 
      for(int a=0;a<LINE_WIDTH;a++) 
      { 
       if(isprint(address[i])) 
        { 
        if(i==*dSz) 
        { 
         exit(0); 
        } 
        else 
        { 
         printf("%c ",address[i]); 
         i++; 
        } 
        } 
       else 
        { 
         if(i==*dSz) 
         { 
          exit(0); 
         } 
         else 
         { 
          printf(". "); 
          i++; 
         } 
        } 
       } 
      } 

그리고이 제 출력 : 메모리의 주요 기능

주소 : 함수 스택 메인 < 먼저 로컬 변수>의 0x10084a830 주소 인 : 0x7fff5f3b5ba8

Enter the start address (hex-notation) of dump: 7fff5f3b5ba8 

Enter the number of bytes to dump <negative or positive value>: 25 

Address  Bytes    Chars 
-------- ----------------------------- ------------------- 
0x7fff5f3b5ba8 A8 5B 3B 5F FF 7F 00 00 E0 5B . [ ; _ . . . . . [ 
0x7fff5f3b5bb2 3B 5F FF 7F 00 00 01 00 00 00 ; _ . . . . . . . . 
0x7fff5f3b5bbc 00 00 00 00 D0     . . . . . . . . . . 

당신은 그들이에 가정되는 바이트 정류장을 볼 수 있지만 문자가하지 않는 한.

i=i-LINE_WIDTH; 

항상 LINE_WIDTH에 의해 i을 증가하지 않을이 코드를 이전주기, 숫자가 작을 수 : 당신이 잘못 곳

+0

안녕과 두 번째 부분에 간다. 그것은 SO 질문에 대한 너무 많은 코드입니다. 동일한 증상을 나타내는 훨씬 간단한 테스트 케이스로 마무리하십시오. –

답변

1

이입니다. 추가 할 때만 뺍니다. 같은

i=i+LINE_WIDTH; 
+0

나는 그것도 생각했지만, 내가 i = i- (LINE_WIDTH-1)로 바꿨을 때 나는 다시 0으로 설정할 것이고, 바이트와 해당 문자는 일치하지 않는다. LINE_WIDTH는 미리 정의 된 상수이며, 여기서는 10입니다. – Sekke91

+0

예제의 꼬리는 5 바이트이고 LINE_WIDTH는 10입니다. 첫 번째주기에서 'i ++;'는 5 번만 실행되고 그 다음에서 10을 뺍니다. 'i'가 5 바이트 뒤진다면 당신은 다음 루프에서 같은 순서로 어떻게 작업 할 것이라고 생각합니까? –

+0

네, 물론 이해합니다. 고마워요! :) – Sekke91

관련 문제