2016-12-03 1 views
-3

K & R 서적에서 64 페이지의 3 장에 itoa 코드가 있습니다. 코드를 컴파일하려고했지만 성공하지 못했습니다. 여기 코드는 다음과 같습니다예기치 않은 위반 행위 (itoa)

#include <iostream> 
#include <conio.h> 
using namespace std; 
void itoa(int, char*); 

int main(void) { 
    _getch(); 
    char arr[100]; 
    itoa(-18,arr); 
    _getch(); 
    return 0; 
} 

void itoa(int n, char* s) { 
    int i, sign; 
    if ((sign = n) < 0) { 
     n = -n; 
    } 
    i = 0; 
    do { 
     s[i++] = n % 10 + '0'; 
    } while ((n/10) > 0); 
    if (sign < 0) s[i++] = '-'; 
    s[i] = 0; 
    //reverse(s); 
} 

출력 : 라인 25

액세스 위반입니다 : s[i++] = n % 10 + '0';

+2

'(n/10)'->'(n/= 10)' – BLUEPIXY

+3

이것은 컴파일 오류가 아닙니다. –

+0

확실히 [I ++]'는 한계를 벗어나지 않습니까? –

답변

2

itoa 100 개 숫자 후 arr의 경계를 초과하는 무한 루프를 가지고 생성됩니다. 루프는 n을 수정하지 않으므로 n이 0에 도달 할 때 종료 할 수 있습니다. while 조건을 n/10 대신 n /= 10을 사용하도록 변경하십시오.

+0

n/2가 아니라 n/= 2가 표시됩니다. 대답이 정확하면 –

+0

을 수락하십시오. – Asu

+1

나는 지금했다. 시간 제한 때문에 나는 유능하지 못했다. –