解决 const char* to char* 的错误

一般情况下

 char* string = "abc";

编译后会出现标题中的错误。

我们只需要在字符串前加上const_cast<char*>即可,这个作用是丢弃变量的const声明,但不能改变变量所指向的对象的const属性。即:const_cast用于原本非const的对象;如果用于原本const的对象,结果不可预知(C++语言未对此种情况进行规定)

 char* string = const_cast<char*>("abc");

另外补充:char * 是分配在字符串常量区的,所以不可改变指向的值,但是可以改变指针的地址

                  char[] 是分配在栈上的,可以改变指向的值,但不可以改变指针的地址

参见: https://blog.csdn.net/qq_32783703/article/details/87707766


测试代码:

#include <iostream>
#pragma warning(disable:4996)

int main() {
    char **aaa = new char*[3];
    char **bbb = aaa;
    std::string s1 = "123";
    std::string s2 = "567";
    *aaa++ = const_cast<char*>(s1.c_str());
    *aaa++ =  const_cast<char*>(s2.c_str());
    *aaa =  const_cast<char*>("0");
    // 输出 123 567 0
    std::cout<<*bbb<<std::endl;
    std::cout<<*(bbb+1)<<std::endl;
    std::cout<<*(bbb+2)<<std::endl;
    // 输出 2
    std::cout<<*(*bbb+1)<<std::endl;
    // 输出 5 6 7 空格
    // 取 xxx 指针数组中第二个字符串地址-> *(bbb+1)
    // 再取字符串中的单个字符地址-> *(*(bbb+1)+1)
    // 需要说明的是,bbb 是字符串地址的地址 
    std::cout<<**(bbb+1)<<std::endl;
    std::cout<<*(*(bbb+1)+1)<<std::endl;
    std::cout<<*(*(bbb+1)+2)<<std::endl;
    std::cout<<*(*(bbb+1)+3)<<std::endl;
    // 输出空格
    std::cout<<*(*(bbb+2)+5)<<std::endl;
    return 0;
}

解决 const char* to char* 的错误

 

原文链接: https://www.cnblogs.com/strive-sun/p/12377804.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    解决 const char* to char* 的错误

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/404989

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年4月25日 下午4:50
下一篇 2023年4月25日 下午4:50

相关推荐