「const char[19]」から「char*」に変換できない問題

9552 ワード

VS 2017で文字列定数を文字ポインタに付与できない問題
C++プログラム、例えばchar*p 1="hello wangbaoming";間違いを報告します!
タイプ変換のインスタンスについて:
#include 
using namespace std;

int main()
{
	double dPi = 3.1415926;

	//1       :                     c                 
	int num1 = static_cast<int> (dPi); //c++             
	int num2 = (int)dPi;				//c           
	int num3 = dPi;						//      
	cout << "num1:" << num1 << " num2:" << num2 << " num3:" << num3 << endl;


	char *p1 = "hello wangbaoming ";
	int *p2 = NULL;
	p2 = (int *)p1;

	//2                   
	//p2 = static_cast (p1); //“static_cast”:    “char *”   “int *”

	//3       reinterpret_cast        
	p2 = reinterpret_cast<int *> (p1);
	cout << "p1 " << p1 << endl;
	cout << "p2 " << p2 << endl;

	//4       :	c               c++     static_cast<>()        //C++              
	//c            , c++     reinterpret_cast<>()           

	system("pause");
	return 0;
}

ソリューション:
  • エラー文の前にconst
  • を追加
  • 「reinterpret_cast」:const charからintに変換できないエラー
  • が発生します.
  • まずconst_を使う必要がありますcastはp 1の読み取り専用属性を除去してタイプ変換
  • を行う.
    次のようになります.
    #include 
    using namespace std;
    
    int main()
    {
    	double dPi = 3.1415926;
    
    	//1       :                     c                 
    	int num1 = static_cast<int> (dPi); //c++             
    	int num2 = (int)dPi;				//c           
    	int num3 = dPi;						//      
    	cout << "num1:" << num1 << " num2:" << num2 << " num3:" << num3 << endl;
    
    
    	const char *p1 = "hello wangbaoming ";
    	int *p2 = NULL;
    	p2 = (int *)p1;
    
    	//2                   
    	//p2 = static_cast (p1); //“static_cast”:    “char *”   “int *”
    
    	//3       reinterpret_cast        
    	char *p3 = const_cast<char *>(p1);
    	p2 = reinterpret_cast<int *> (p3);
    	cout << "p1 " << p1 << endl;
    	cout << "p2 " << p2 << endl;
    
    	//4       :	c               c++     static_cast<>()        //C++              
    	//c            , c++     reinterpret_cast<>()           
    
    	system("pause");
    	return 0;
    }