2014-04-27 2 views
1

숫자를 로마 숫자로 변환하는 프로그램을 작성하려고했습니다. (여기에있는 코드의 복제본은 How to convert integer value to Roman numeral string?입니다.) 저는 프로그램 논리가 알 맞다고 확신합니다. printf() 여기 런타임 오류가 발생하는 이유포인터를 사용하여 문자열 인쇄 : 런타임 오류

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

int main(){ 
const char *huns[] = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"}; 
const char *tens[] = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"}; 
const char *ones[] = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"}; 
const int size[] = {0, 1, 2, 3, 2, 1, 2, 3, 4, 2}; 

char *_buffer; 
unsigned int num; 

input: 
printf("Enter number to convert:\n"); 
scanf("%ud", &num); 

if(num>4000) 
    goto input; 

while(num>=1000){ 
    *_buffer++ = 'M'; 
    num -= 1000; 
} 

strcpy (_buffer, huns[num/100]); _buffer += size[num/100]; num = num % 100; 
strcpy (_buffer, tens[num/10]); _buffer += size[num/10]; num = num % 10; 
strcpy (_buffer, ones[num]);  _buffer += size[num]; 

*_buffer ='\0'; 
printf("%s", _buffer); // This is where the Runtime Error occurs. 

return 0; 
} 

누군가가 설명해 주시겠습니까 : 여기 내 코드는? 나는 puts()도 시도했는데 작동하지 않았다. 컴파일 및 코드 : 블록 13.11 (MINGW gcc)뿐만 아니라 http://ideone.com, 시도했지만 모두 동일한 오류가 발생합니다.

+0

왜냐하면 당신은'_buffer'를위한 메모리를 할당하지 않기 때문입니다. .. malloc .. – GoldRoger

답변

0

당신은 문제가 있습니다. (컴파일러가 이미 이것에 대한 경고를 발행했을 것입니다) _buffer는 초기화되지 않았습니다. 즉, 메모리의 임의의 주소를 가리키고 있습니다. 따라서 런타임 오류가 발생합니다.

char buffer [128]; 
char *_buffer=buffer; 

에 코드를 변경하고 buffer (안 _buffer)는 printf .

+0

컴파일러는 경고를 표시하지 않았습니다. 그래도 고마워. 나는 버퍼에 대한 메모리를 미리 할당하지 않았기 때문에이 문제를 미리 생각하지 않는다. – Quirk

+0

좋은 컴파일러는 초기화되지 않은 변수를 사용하는 것에 대해 경고했을 것입니다. 경고 레벨을 올리십시오 (gnu-c :'-Wall'). – Anonymouse

관련 문제