2017-12-16 44 views
0

Cでconst char *にcharを割り当てるにはどうすればよいですか?const char *にcharを割り当てる方法*

const char* cp; 
unsigned maxlen = 20; 
cp = new char[maxlen]; 
char p = 'U'; 
cp = p; 

私はエラーを取得しています:

Error: invalid conversion from 'char' to 'const char* 

私は、配列のCPの最初の要素に文字pを割り当てることができますどのように?

+0

これにはC++のものがあります。つまり、 'new'です。なぜそれはCにタグ付けされていますか? 'const'について読みましたか? –

+0

あなたは何をする必要があるのか​​を説明しました:_文字' p'を配列の最初の要素に割り当てます_。さて、あなたは配列について知るべきです。 – ForceBru

+6

'cp'は配列ではなく、' const'と宣言されているため、その要素に代入することはできません。つまり、それが 'const'の全体のポイントです。 – melpomene

答えて

-3

方法のconst char型へのcharを割り当てるために*

const char* cp; 
    char p = 'U'; 
    cp = &p; 
+0

これはあなたのコードをコンパイルします。私はあなたのコードスニペットを判断していません。 – arpl

+1

'cp = new char [maxlen]; cp = ... 'はメモリリークです。 'new'が返すチャンクへの唯一のポインタが失われました。 – melpomene

+0

私はコードを判断しない、それはコンパイルされます。 – arpl

2

How can I assign the char p to the first element of the array cp?

あなたがすることはできません、cpconst charへのポインタですので。 constは初期化後の突然変異を防ぎます。上記++恐ろしいCであることを

char* cp; 
unsigned maxlen = 20; 
cp = new char[maxlen]; 
char p = 'U'; 
cp[0] = p; 

注:あなたが本当にcpの要素を変更したい場合は

constを削除します。動的配列にはstd::vector、固定長配列にはstd::arrayを使用してください。例:あなたは安全な方法で行うことはできません

std::vector<char> cp; 
cp.resize(20); 
cp[0] = 'U'; 
+1

この回答は、 'std ::'構造体を使用し、ポインタと 'new'の直接使用を避けるため、正しいです。あなたがRAIIの熱狂者になり、後でサイズを変更するのではなく、すぐに目的の長さで超近代的な 'auto'とinitを使用したいなら、' auto cp = std :: vector {20}; ' – erapert

+0

@ C++ 11で導入された「自動」についてのいくつかのことをすでに知っていることは間違いないと思います。ニックピッキングするには、目的のサイズのベクトルを初期化する場合は、一様初期化子 '{20}'を使用しないでください。そうでなければ、値20の単一要素を持つベクトルを作成します(コンストラクタn n°3 [ここ](http://en.cppreference.com/w/cpp/container/vector/vector)の代わりに°8)。 –

+0

優れた点!教育に感謝します。 – erapert

0

は、良いアイデアは次のようになります。

char * nonConstPtr = new char[len]; 
*nonConstPtr = 'a'; 
nonConstPtr[1] = 0; 
char const * constPtr = nonConstPtr; 

あなたでしあなたが今持っているコードのキャストでそれを行うが、離れて投げ恒常性は一般的に悪い考えです:

const char* cp; 
unsigned maxlen = 20; 

cp = new char[maxlen]; 
char p = 'U'; 
char * ptr = (char*)cp; 
memset(ptr, 0, maxlen); 
*ptr = p; 
0

これは受け入れ可能か間違っていますか?

unsigned maxlen = 20; 
char *cp; 
cp = (char*) malloc(sizeof(char) * maxlen); 
char c = 'P'; 
*cp = c; 

私はヌルターミネーションが欠落していることを理解しています。私はstrncpyを使ってみましたが、charでは動作しません。

アドバイスありがとうございます。

関連する問題