回答編集履歴
4
typoを修正
test
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
1.このソース内の,どこで変換を実施しようとしているのか。
|
2
2
|
|
3
|
-
文字列リテラルは、これは正確な言い方ではないかもしれませんが、const
|
3
|
+
文字列リテラルは、これは正確な言い方ではないかもしれませんが、const char*型です。char*型に代入することが変換に該当します。
|
4
4
|
|
5
5
|
|
6
6
|
|
@@ -22,7 +22,7 @@
|
|
22
22
|
|
23
23
|
解説
|
24
24
|
|
25
|
-
文字列リテラルは内容の書き換えが不可能な文字列です。つまり、文字列リテラルのポインタを扱う場合は const
|
25
|
+
文字列リテラルは内容の書き換えが不可能な文字列です。つまり、文字列リテラルのポインタを扱う場合は const char* 型を使用する必要があります。
|
26
26
|
|
27
27
|
const修飾子がついていないために警告がでているのだと思います。
|
28
28
|
|
3
追記
test
CHANGED
@@ -36,8 +36,8 @@
|
|
36
36
|
|
37
37
|
|
38
38
|
|
39
|
-
char[] = {"Math"} では長さ5のローカルの文字列変数に "Math" の値を詰め込んでいます。つまり、文字列リテラル(定数)の中身を一旦ローカル変数にコピーしています。
|
39
|
+
char[] = {"Math"} では長さ5のローカルの文字列変数に "Math" の値を詰め込んでいます。つまり、文字列リテラル(定数)の中身を一旦ローカル変数にコピーしています。この文字列が編集されても定数は変更されません。
|
40
40
|
|
41
41
|
|
42
42
|
|
43
|
-
一方、char*だとconst無しのポインタに定数
|
43
|
+
一方、char*だとconst無しのポインタに定数自体のポインタを代入している形になります。定数はプログラムのリソース部分にあたります。定数自体を編集する(=この状態でchar*の参照先の文字列を編集する)場合の動作は未定義=禁止事項です。このため、const修飾子を着けて文字列リテラルを保護することが推奨されます。
|
2
重複した表現の削除
test
CHANGED
@@ -22,7 +22,7 @@
|
|
22
22
|
|
23
23
|
解説
|
24
24
|
|
25
|
-
文字列リテラルは内容の書き換えが
|
25
|
+
文字列リテラルは内容の書き換えが不可能な文字列です。つまり、文字列リテラルのポインタを扱う場合は const *char 型を使用する必要があります。
|
26
26
|
|
27
27
|
const修飾子がついていないために警告がでているのだと思います。
|
28
28
|
|
1
追記
test
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
1.このソース内の,どこで変換を実施しようとしているのか。
|
2
2
|
|
3
|
-
文字列リテラルは
|
3
|
+
文字列リテラルは、これは正確な言い方ではないかもしれませんが、const *char型です。char*型に代入することが変換に該当します。
|
4
4
|
|
5
5
|
|
6
6
|
|
@@ -8,7 +8,9 @@
|
|
8
8
|
|
9
9
|
const char*subname[]に変更して下さい。
|
10
10
|
|
11
|
-
より適切な方法としてはLPCTSTR等のマクロ利用があります
|
11
|
+
より適切な方法としてはLPCTSTR等のマクロ利用があります。
|
12
|
+
|
13
|
+
機会があれば調べてみてください。(こちらは割愛します)
|
12
14
|
|
13
15
|
|
14
16
|
|