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

C:将常量字符串转换为常规字符串,c,string,constants,C,String,Constants,我得到了一个函数,它在C中有一个常量char*作为参数。如何将其转换为常规char*以便对其执行字符串操作?当我有以下内容时,我得到以下内容:警告:初始化丢弃指针目标类型中的“const”限定符[默认启用] 如何将常量字符串转换为可以对其执行字符串操作的字符串 char* path = ""; strcpy(path, pathname) 这没有道理。这里,path指向一个常量。所以当你试图复制一个字符串到它里面时,你试图改变一个常数,当然,你不能这样做,因为根据定义,常数的值不能改变 也许

我得到了一个函数,它在C中有一个常量char*作为参数。如何将其转换为常规char*以便对其执行字符串操作?当我有以下内容时,我得到以下内容:警告:初始化丢弃指针目标类型中的“const”限定符[默认启用]

如何将常量字符串转换为可以对其执行字符串操作的字符串

char* path = ""; 
strcpy(path, pathname)
这没有道理。这里,
path
指向一个常量。所以当你试图复制一个字符串到它里面时,你试图改变一个常数,当然,你不能这样做,因为根据定义,常数的值不能改变

也许你想要:

char *path = strdup(pathname);

您的代码已损坏,它试图将传入字符串复制到字符串literal
“”
所占用的空间,这是非法的(literal字符串是只读的)

您必须分配堆内存并将字符串复制到其中

这可以用,这不是标准的,但相当普遍

您可以这样重新实现它:

char * my_strdup(const char *s)
{
  char *out = NULL;
  if(s != NULL)
  {
    if((out = malloc(strlen(s) + 1) != NULL)
      strcpy(out, s);
  }
  return out;
}

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

多年来,C教授的一件事就是谦逊。。。检查我的新问题:@chqrlie绝对正确。哎哟。
char * my_strdup(const char *s)
{
  char *out = NULL;
  if(s != NULL)
  {
    if((out = malloc(strlen(s) + 1) != NULL)
      strcpy(out, s);
  }
  return out;
}