C:将常量字符串转换为常规字符串
问题描述:
我给出了一个函数,它具有一个const char *作为参数C.如何将它转换为常规字符*以便对其进行字符串操作?当我有以下,我得到如下:警告:初始化抛弃“常量”指针目标类型的限定词[默认启用]C:将常量字符串转换为常规字符串
char* pathname_lookup(const char* pathname) {
assert (pathname[0] == '/');
char* path = "";
strcpy(path, pathname);
path = path + 1;
return path;
}
如何转换的常量字符串转换为字符串我可以做字符串操作?
答
char* path = "";
strcpy(path, pathname)
这是没有意义的。在这里,path
指向一个常量。所以当你试图将一个字符串复制到它中时,你试图改变一个常数,当然,你不能这样做,因为根据定义,常量不能改变它们的值。
也许你想:
char *path = strdup(pathname);
答
您的代码被打破,它试图进入的字符串复制到由字符串字面""
,这是违法的(文字字符串是只读的)所占用的空间。
您必须分配堆内存并复制那里的字符串。
这可以用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;
}
以上可能是微优化,但应该足以满足大多数用途。
@chqrlie *腮红*。修正了,谢谢。 – unwind
C多年来教导的一件事就是谦虚......检查我的新问题:http://stackoverflow.com/questions/32944390/what-is-the-rationale-for-not-including-strdup-in-the- c-standard – chqrlie
@chqrlie绝对。哎哟。 – unwind