본문 바로가기
Language/C++

[C++] BOJ 컴파일 에러 이유와 해결방법

by 별토끼. 2018. 12. 11.
반응형

[C++] BOJ 컴파일 에러 이유와 해결방법


 C++을 접한 뒤 알고리즘 공부를 하던 중 한 문제가 자꾸 컴파일 에러가 발생했습니다. VisualStudio2017을 사용하고 있는데 에디터 내에서는 발생하지 않는 오류가 채점만 하면 자꾸 컴파일 에러가 뜹니다. 저와 같은 컴파일 에러를 겪는 사람들이 많더라구요. 원인을 찾아보니 꼼꼼히 코드를 짜지 못한 제 탓이었습니다ㅠㅠ 

컴파일 에러 원인?

요약하면 <헤더의 의존성> 때문입니다. 

비쥬얼 스튜디오에서는 의존성을 보고 헤더를 자동으로 추가해주기 때문이라고 하네요. 비쥬얼 스튜디오는 VS C++ compiler를, 채점의 경우 GCC compiler를 사용합니다.

해결 방법

컴파일 채점환경과 비슷하게 실행을 하면 됩니다.

MinGW 프로그램을 설치하는 방법도 있지만 저는 Online IDE에서 실행을 해보는 방법을 사용했습니다. 따로 설치없이 비슷한 환경에서 확인 가능합니다.

이 중 저는 ideone.com을 이용하여 에러 메세지를 확인하고 구글링을 통해 해결했습니다.


문제 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <string>
using namespace std;
 
int main() {
    string line;
    cin >> line;
    char a[101];
    strcpy_s(a, line.c_str());
    for (int i = 0; i < sizeof(a); i++) {
        if (a[i]=='\0') {
            break;
        }
        if (i!=0 && i % 10 == 0) {
            cout << '\n' << a[i];
        }
        else {
            cout << a[i];
        }
    }
}
cs

고친 코드

cstring 헤더파일을 추가하고 strcpy_s를 strcpy로 바꾸어주었습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
 
int main() {
    string line;
    cin >> line;
    char a[101];
    strcpy(a, line.c_str());
    //BaekjoonOn
    //lineJudge
    for (int i = 0; i < sizeof(a); i++) {
        if (a[i]=='\0') {
            break;
        }
        if (i!=0 && i % 10 == 0) {
            cout << '\n' << a[i];
        }
        else {
            cout << a[i];
        }
    }
}
cs

[참고] https://www.acmicpc.net/blog/view/52


반응형

댓글