C++ String 사용 시, constant 관련 warning 해결 방법에 대해 기술한다.


소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
#include <string.h>

using std::cout;
using std::endl;

class Printer{
    private:
        char str[30];
    public:      
        //void SetString(const char * _str);
        void SetString(char * _str);
        void ShowString();
};

//void Printer::SetString(const char * _str){
void Printer::SetString(char * _str){     
    strcpy(str, _str);
}
void Printer::ShowString(){        
    cout << str << endl;
}

int main(void){
    Printer pnt;
    pnt.SetString("Hello World!");
    pnt.ShowString();

    pnt.SetString("I Love C++");
    pnt.ShowString();
    return 0;
}

오류

1
chap_3-1-2.cpp:56:31: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]

원인

. SetString 함수를 통해, str의 주소 값이 변경될 수 있는 위험성에 따라 경고가 발생함

해결방안

문자열을 전달, 조작하는 인자에 const 키워드를 붙여줌

문자열을 가리키는 주소 값이 실수로 변경되는 오류를 미연에 방지

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Printer{
    private:
        //char * str;
        //const char* arr[];
        //const char * str;
        char str[30];
    public:      
        void SetString(const char * _str);	// const 키워드 추가
        // void SetString(char * _str);
        void ShowString();
};

void Printer::SetString(const char * _str){	// const 키워드 추가
//void Printer::SetString(char * _str){     
    strcpy(str, _str);
}