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

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

以上可能是微优化,但应该足以满足大多数用途。

+0

@chqrlie *腮红*。修正了,谢谢。 – unwind

+0

C多年来教导的一件事就是谦虚......检查我的新问题:http://stackoverflow.com/questions/32944390/what-is-the-rationale-for-not-including-strdup-in-the- c-standard – chqrlie

+0

@chqrlie绝对。哎哟。 – unwind