c++ - strtof - sprintf float to string




경고:문자열 상수에서 'char*'로의 사용되지 않는 변환 (2)

가능한 중복 :
GCC deprecated conversion from string constant to 'char*' 경고로 deprecated conversion from string constant to 'char*' 제거하는 방법?

내가 변경할 수없는 라이브러리에서 다음 함수를 사용합니다.

HRESULT DynamicTag(char * pDesc, int * const pTag ); 

나는 다음과 같이 사용한다. 위의 함수를 구현하는 라이브러리가 제공하는 클래스의 객체를 만들었습니다.

int tag =0;
g_pCallback->DynamicTag("MyLogger", &tag);

나는 다음과 같은 경고를 받고있다 :

warning: deprecated conversion from string constant to 'char*'

위의 경고를 제거하는 가장 좋은 방법은 무엇입니까? 나는 동적으로 메모리를 할당하고 싶지 않다.

정보 : Vxworks6.8 컴파일러를 사용하고 있습니다.


알 수없는 라이브러리 다루기

리터럴을 전달할 때와 다른 const 문자열을 전달할 때 라이브러리가 문자열을 수정하고 있는지 확실하지 않은 경우 C ++에서 리터럴의 임시 사본을 할당 한 스택을 쉽게 만들 수 있습니다 (영숫자로 인해 '문자열 상수에서 사용되지 않는 변환 제거 방법 GCC의 'char *'경고에? ) :

char strMyLogger[]="MyLogger";
g_pCallback->DynamicTag(strMyLogger, &tag);

약한 라이브러리 프로토 타입을 처리하려면 명시 적 형 변환 사용

대부분의 컴파일러에서 명시 적 변환은 다음과 같은 경고를 방지합니다.

 g_pCallback->DynamicTag(const_cast<char *>("MyLogger"), &tag);

참고 : 함수가 실제로 전달 된 문자열을 수정하지 않는다고 확신하는 경우에만 사용할 수 있습니다 (예 : 함수가 const char *로 선언 될 수 있지만 실제로는 라이브러리 작성자가이를 잊어 버렸기 때문에 그렇지 않습니다). 문자열 리터럴을 수정하려는 시도는 정의되지 않은 동작이며 많은 플랫폼에서 충돌이 발생합니다. 확실하지 않은 경우 문자열 크기에 대한 상한값을 알고있는 경우 문자열의 쓰기 가능한 복사본을 만들어야합니다.이 복사본은 동적으로 할당되거나 스택에 할당 될 수 있습니다.


그 값을 배열로 전달하십시오.

int tag =0;
char arr[] = "MyLogger";
g_pCallback->DynamicTag(arr, &tag);




compiler-warnings