我给了一个函数,它有一个const char *作为C中的参数。如何将它转换为常规char *以便对它进行字符串操作?当我有以下内容时,我得到以下结果:警告:初始化从指针目标类型[默认启用]中丢弃'const'限定符
char* pathname_lookup(const char* pathname) {
assert (pathname[0] == '/');
char* path = "";
strcpy(path, pathname);
path = path + 1;
return path;
}
如何将const字符串转换为字符串我可以对其进行字符串操作?
答案 0 :(得分:4)
char* path = "";
strcpy(path, pathname)
这没有意义。在这里,path
指向常数。因此,当您尝试将字符串复制到其中时,您尝试更改常量,当然,您不能这样做,因为根据定义,常量不能更改其值。
也许你想要:
char *path = strdup(pathname);
答案 1 :(得分:2)
您的代码已损坏,它会尝试将传入的字符串复制到字符串文字""
占用的空间中,这是非法的(文字字符串是只读的)。
您必须分配堆内存并将字符串复制到那里。
这可以使用strdup()
完成,这不是标准但很常见。
您可以像这样重新实现它:
char * my_strdup(const char *s)
{
char *out = NULL;
if(s != NULL)
{
if((out = malloc(strlen(s) + 1) != NULL)
strcpy(out, s);
}
return out;
}
以上可以进行微观优化,但这应该足以满足大多数用途。