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
来编译。
有人提出一些建议如何解决这个问题。非常感谢..
答案 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分配空间。分配足以容纳您正在复制的字符串。