在C语言中将const char*转换为char*出现问题

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

有人能提供一些建议如何解决这个问题吗?非常感谢。


如果你发现const_cast<char *>g++下工作正常,但在gcc的C编译器部分不起作用,那么你就有了一些证据表明它是C++而不是C... - glglgl
4个回答

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://dev59.com/sHVC5IYBdhLWcg3wjx_u


7

你需要为新字符串分配空间。你使用strcpy是正确的,因为const_cast只在C ++中使用。编辑:正如Miroslav建议的那样,最好使用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;
]

4

const_cast是C++中的一个概念,在C语言中不存在。

如果您想使用strcpy,不能只使用未初始化的指针(例如new_name)。您需要先分配足够的空间(使用malloc),然后在使用完毕后使用free释放该空间。


1

您尚未为 new_name 分配空间。请分配足够的空间来容纳要复制进去的字符串。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接