2012-03-04 3 views
3
int A(const char* name){  
    name = "Here you GO!";  
    char* new_name;  
    //strcpy(new_name,name);  
    new_name = const_cast<char *>(name);  
    printf("%s\n", new_name);  
    return 0;  
} 

이것은 테스트하고있는 소스 코드입니다.const char *을 char * in c로 변환 할 때의 문제

하나의 문제는 const_cast<char *>을 사용할 때 신고되지 않았다고 말합니다. (나는 'g ++'컴파일러에서 작동 할 수 있다는 것을 알고있다.) Anther 문제는 strcpy을 함께 사용하려고 할 때 세그먼트 화 오류를 일으킨다. 전제는 내가 컴파일 gcc whatevername.c -std=c99 사용해야합니다.

누구든지 해결 방법을 제안합니다. 많이 감사합니다 ..

+0

당신이'++ g'에서 작동하는'을에 const_cast,하지만 gcc'의 C 컴파일러 부분 '에서 볼 경우, 당신은 C입니다 ++이 아닌 C ... – glglgl

답변

7

:

int A(const char* name){ 
    name = "Here you GO!"; 

    char* new_name = strdup(name); 

    printf("%s\n", new_name); 
    return 0; 
} 

에서는 StrDup에 대한 자세한 내용은이 대답을()를 참조하십시오 : 당신의 malloc()를 호출 한 후) (strcpy를 사용하거나 당신을 위해 모두 일을 할 것이다) (에서는 StrDup를 호출 할 수 있습니다 새 문자열을위한 공간을 할당해야합니다. const_cast은 C++에만 해당되므로 strcpy을 사용하여 올바른 방향으로 이동했습니다. 편집 : 심지어 더 나은 사용 strdup Miroslav 제안합니다.

int A(const char* name) 
{ 
    name = "Here you GO!"; 
    char* new_name = malloc(strlen(name)+1); 
    if (new_name) { 
     strcpy(new_name,name); 
     printf("%s\n", new_name); 
    } 
    return 0; 
] 
4

const_cast은 C++의 것입니다. C에 존재하지 않습니다.

strcpy을 사용하려는 경우 초기화되지 않은 포인터 (예 : new_name)를 사용할 수 없습니다. 먼저 충분한 공간을 할당해야하며 (malloc), 완료되면 free 공백을 할당해야합니다.

1

new_name에 공간을 할당하지 않았습니다. 복사하려는 문자열을 보유 할만큼 충분히 할당하십시오.

관련 문제