0
4

2 に答える 2

1

文字列定数は、その名の通り定数です。したがって、警告を消すには、ポインターを const ポインターに変えるのが適切な解決策です。

それができない場合は、明示的な型キャストを行うことができます

ACE_TCHAR* argv[] = {const_cast<ACE_TCHAR*>("Input1"),
                     const_cast<ACE_TCHAR*>("Input2")};

または、最初に文字列を非定数文字配列に割り当てます

char input1[] = "Input1";
char input2[] = "Input2";
ACE_TCHAR* argv[] = {input1, input2};
于 2013-02-01T14:36:42.570 に答える
1

文字列リテラルの型は「の配列const char」です。暗黙的な配列からポインターへの変換により、これを使用して初期化または a への割り当てを行うことができますconst char *

ただし、文字列リテラルも暗黙的にchar *(const なしで) に変換できるという特別な規則があります。char * str = "string literal"この規則は、一般的なイディオムであった古い C コードとの互換性のために存在します。これを使用するのは危険です。そのポインターを介して文字配列へのポインタを変更すると、未定義の動作が発生するためです (つまり、プログラムがクラッシュしたり、その他のことが起こる可能性があります)。そのため、この構造は非推奨であり、コンパイラはそれについて警告します。

非定数文字ポインターとして渡すことができる有効なデータを作成するには、次を使用できます。

const int argc = 2;
ACE_TCHAR argv0[] = "Input1";
ACE_TCHAR argv1[] = "Input2";
ACE_TCHAR* argv[] = { argv0, argv1 };
MyClass *myClass = new MyClass(argc, argv);
于 2013-02-01T14:38:24.150 に答える