转换const char *到char *的问题

时间:2012-03-04 17:41:46

标签: c char const

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

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

4 个答案:

答案 0 :(得分: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;
}

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

答案 1 :(得分:7)

您需要为新字符串分配空间。您使用strcpy走在正确的轨道上,因为const_cast仅限C ++。编辑:更好地使用strdup,正如米罗斯拉夫所暗示的那样。

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;
]

答案 2 :(得分:4)

const_cast是一个C ++的东西;它在C中不存在。

如果您想使用strcpy,则不能只使用未初始化的指针(即new_name)。您需要首先分配足够的空间(使用malloc),然后在完成后再分配free空间。

答案 3 :(得分:1)

您尚未为new_name分配空间。分配足以容纳您正在复制的字符串。