转换const char*到char*的问题

use*_*245 3 c const char

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;    
}
Run Code Online (Sandbox Code Playgroud)

这是我正在测试的源代码.

一个问题是,当我使用时const_cast<char *>,它说它是未声明的.(我知道它可以在'g ++'编译下工作)另一个问题是当我尝试strcpy将它们组合在一起时,它会弹出分段错误.前提是我必须gcc whatevername.c -std=c99用来编译.

有人提出一些建议如何解决这个问题.非常感谢..

Mir*_*toš 9

您正在获得分段错误,因为new_name无处可寻.

解决方案:为new_name分配内存.你可以调用malloc()然后使用strcpy(),或者调用strdup(),这将为你做两件事:

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

    char* new_name = strdup(name);

    printf("%s\n", new_name);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

有关strdup()的更多详细信息,请参阅此答案:https://stackoverflow.com/questions/252782/strdup-what-does-it-do-in-c


Gun*_*iez 7

您需要为新字符串分配空间.你使用的是正确的轨道strcpy,因为const_cast只有C++.编辑:更好地使用strdupMiroslav建议.

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;
]
Run Code Online (Sandbox Code Playgroud)