에러 구문을 해석하면
에러 noname00.cpp 6번째 라인에서 : 함수 'cprintf' 원형을 가져야 합니다.
라는 것으로 cprintf라는 함수가 리턴값이 뭔지.. 인자로 무엇을 받는지 적혀있는 "함수선언"이 없다는 것이죠.
cprintf는 콘솔 입출력 표준라이브러리에 속한 함수 이므로.. #include <conio.h>를 추가하시면 됩니다. 젤 위에..
#include <conio.h> // con+io는 con은 콘솔로서 화면을 주로 뜻합니다. io는 input / output을 뜻합니다.
참고로 #include <stdio.h> // 요넘도 비슷한 녀석이죠.. std는 standard 표준이라는 거고 역시 io는 입출력이죠..
결론적으로 conio.h라는 파일을 찾아서 열어보시면 cprintf()의 선언문을 보실수 있습니다...
그리고 아래의 내용중에는 상당히 치명적인 오류가 포함되어 있습니다.
char * myBuffer;과 실제 사용된 문장인데요... 이것은 단순히 주소를 저장할 수 있는 공간만을 얻을 수 있는데...
밑에서 사용되어진 문장은 i = sprintf(myBuffer, "%s\n", "test3"); 로서.. 할당되지 않은(예약되지 않은)
주소공간에다가 데이타인 "test3"를 집어넣는다는 거죠... 주소공간이란 나중에 배우는 포인터라 불리우는 것으로
데이타 혹은 대상이 저장되어진 장소의 시작점 혹은 실행이 되어지는 장소등등을 나타내는 것이며,
실제로 myBuffer는 초기화(값이 지정되는 것) 되지 않았으므로 어떤 장소를 가르키고(어떤 값이) 있을지 모릅니다.
이런 경우에 여기에다 "test3"를 저장해 버린다면 보통은 별일 없겠지만... 최악의 경우 시스템 다운을 일으키게
되는 원인이 됩니다.
혹시나...이런 소스를 올바른 소스라고 소개하는 책이라면 당장 버리시길 바랍니다...
책에서는 이렇게 사용하면 안된다 ... 뭐.. 그런 예시로 적어놓은 거겠지요..하하..
박상현 님이 쓰신 글 :
: #include <stdio.h>
:
: void main() {
: char* myBuffer;
: int i =100;
: i = cprintf("%s\n\r", "test1");
: printf("출력된 문자열 수는 : %d입니다.\n", i);
: i = printf("%s\n", "test2");
: printf("출력된 문자열 수는 : %d입니다.\n", i);
: i = sprintf(myBuffer, "%s\n", "test3");
: printf("출력된 문자열 수는 : %d입니다.\n\r", i);
: }
:
: 컴파일하면
:
: Error NONAME00.CPP6:Function 'cprintf' should have a prototype
:
: 이런에러가 뜨던데.. 뭐가 잘못된것인지 모르겠습니다.
:
: 책과 동일하게 실습하기 위해 해본 것이었는데.. ㅡㅡ;;
|