警告を表示します。ISO C++は文字列定数を'char*'に変換することを禁じています[-Write-strings]。
2022-02-08 22:50:06
これはC++11で明示されています
char* p = "abc"; // valid in C, invalid in C++
この割り当てを行うと、コンパイラはタイトルのような警告をポップアップで表示します。しかし、このように変更すれば、警告をパスすることができます。
char* p = (char*)"abc"; //OK
あるいは、こうだ。
char const *p="abc";//OK
どうなっているんだ?実は、cやc++を学習した方なら誰でも知っているように、代入操作の際に等号の両側にある変数の型が異なる場合、コンパイラは暗黙の変換というものを行い、その変数を代入できるようにするのです。
上の式にそのような問題があります。等号の右側の "abc" は不変定数で、C++ では文字列リテラルと呼ばれ、型は const char *、p は char ポインタである。無理やり代入するとどうなるのでしょうか?その通り、右の定数をポインタに強制的に型変換し、結果的にconst定数を変更していることになります。コンパイル実行の結果は、コンパイラとOSの両方が判断します。パスするコンパイラもあれば、例外を投げるコンパイラもありますし、パスしてもOSの感性で殺される場合もあります。
文字列リテラルをポインタに直接代入するこのような操作は、開発者によって非推奨とされています。
関連
-
c++ プログラミング プロンプトの関数定義はここでは許可されません。
-
C/C++共通エラーの概要
-
vs2015 はソースファイル stdio.h を見つけることができない 解決策
-
VCのグローバル変数が*.objで既に定義されている場合の問題点
-
gcc/g++ コンパイル時のエラー解析で期待される型指定子の前に
-
警告: この関数では 'p' が初期化されていない状態で使用されることがあります。
-
munmap_chunk():不正なポインタとSegmentation faultのバグを解決。
-
c++ 11 random ライブラリの簡単な使い方
-
stoi' の解決策は、Dev-c++ のこのスコープで宣言されていません。
-
C++ inet_pton, inet_ntop 関数
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
undefinederror: 'dynamic_cast' の前に unqualified-id を指定する必要があります。
-
エラー: "***"の前にイニシャライザーがあります。
-
エラー: コンストラクタ、デストラクタ、または '.' トークンの前に型変換が必要です。
-
C++プロジェクトのコンパイル時に再定義の多重定義問題を解決する
-
抽象クラス型 "my class "のオブジェクトは使用できません 解決方法
-
C/C++ におけるランダム関数 rand() および srand() の使用法
-
C++11 ランダムライブラリ乱数
-
C++共通ライブラリ関数一覧
-
c++ベクトル使用集
-
"name.bat "は、内部または外部のコマンド、操作可能なプログラムまたはバッチファイルとして認識されません。