C:将const字符串转换为常规字符串

时间:2015-10-05 07:32:25

标签: c string const

我给了一个函数,它有一个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字符串转换为字符串我可以对其进行字符串操作?

2 个答案:

答案 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;
}

以上可以进行微观优化,但这应该足以满足大多数用途。