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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM