programing

C에서 const char*를 char*로 변환하는 방법

sourcejob 2022. 10. 15. 09:56
반응형

C에서 const char*를 char*로 변환하는 방법

내 프로젝트에는 오직 a-method만 반환하는 방법이 있다.const char*단, 필요한 것은char*API가 받아들일 수 없는 문자열const char*.

다음 중 하나를 변환하는 방법을 알고 계십니까?const char*로.char*?

우선, 이러한 작업은 꼭 필요한 경우에만 수행해야 합니다. 예를 들어, 오래된 스타일의 API를 사용하는 등char*수정되지 않은 인수입니다.API 함수가 원래 일정했던 문자열을 수정하는 경우 이는 지정되지 않은 동작이며 크래시 가능성이 높습니다.

캐스트 사용:

(char*)const_char_ptr

안전을 위해 데이터를 부수거나(예: 코드에서 문자열이 변경된 경우) 프로그램을 중단하지 않습니다(예: 반환된 문자열이 리터럴인 경우)."hello I'm a literal string"편집을 시작합니다). 반환된 문자열의 복사본을 만듭니다.

사용할 수 있습니다.strdup()작은 글씨도 읽어보세요.또는 플랫폼에 없는 경우 자체 버전을 만들 수도 있습니다.

를 사용할 수 있습니다.strdup다음과 같은 원형을 가진 기능

char *strdup(const char *s1);

사용 예:

#include <string.h>

char * my_str = strdup("My string literal!");
char * my_other_str = strdup(some_const_str);

또는 버퍼에 strcpy/strncpy를 지정합니다.

또는 기능을 재작성하여 사용할 수 있습니다.const char *대신 파라미터로char *가능한 한 보존할 수 있도록const

A const포인터에 "읽기 전용" 메모리 위치를 나타냅니다.반면에 없는 사람들은const는 읽기/쓰기 메모리 영역입니다.즉, "변환"할 수 없습니다.const(읽기 전용 위치)에서 일반(읽기/쓰기) 위치로 이동합니다.

다른 방법은 데이터를 다른 읽기/쓰기 위치에 복사하고 이 포인터를 필요한 기능에 전달하는 것입니다.사용할 수 있습니다.strdup()이 작업을 수행합니다.

변환하려면const char*로.char*다음과 같은 함수를 만들 수 있습니다.

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

char* unconstchar(const char* s) {
    if(!s)
      return NULL;
    int i;
    char* res = NULL;
    res = (char*) malloc(strlen(s)+1);
    if(!res){
        fprintf(stderr, "Memory Allocation Failed! Exiting...\n");
        exit(EXIT_FAILURE);
    } else{
        for (i = 0; s[i] != '\0'; i++) {
            res[i] = s[i];
        }
        res[i] = '\0';
        return res;
    }
}

int main() {
    const char* s = "this is bikash";
    char* p = unconstchar(s);
    printf("%s",p);
    free(p);
}

이렇게 해서 캐스팅할 수 있어요.(char *)Identifier_Of_Const_char

하지만 api가 받아들이지 않는 이유가 있기 때문에const cahr *이 조작을 실행하는 것은, 확실히 하는 경우 뿐입니다만, 함수는, 그 범위내의 값을 할당하려고 하지 않습니다.const char*비변성적인 사람에게 던져준 거야

언급URL : https://stackoverflow.com/questions/25549562/how-to-convert-const-char-to-char-in-c

반응형