2012-01-26 22 views
0

私のコードの2行に次の警告が表示されます。Cでは、初期化破棄の修飾子に関する警告を表示する文字列

initialization discards qualifiers from pointer target type 

警告のソースは2行です。

function (const char *input) { 
    char *str1 = input; 
    char *str2 = "Hello World\0"; 
} 

私はchar *型へのconstのchar *を割り当てようとするので、最初の行がエラーを与えると思います。どのように私はそれを修正するだろうか?

+3

なぜあなたの文字列に "\ 0"はありますか?引用符で囲まれた文字列は、すでにヌル文字で終了しています。あなたが "abc"と言うときは4バイト、最後のものは0です。 – TJD

答えて

2

は、あなたはそれをconstとして宣言する必要があります:

const char *str1 = input; 
+1

'char * str2 =" Hello World ";'は非推奨です。なんでそんなことを言ってるの? – ouah

+0

それは私が教えたものでした。そうじゃないの? – user1118321

+0

こんにちは、str1の値が関数全体で大きく変化するので、char *として宣言したいと思います。私がconstとしてそれをキャストすると、私はchar *の内容を変更することができなくなります。また、同じ理由でstr2の正確なサイズを設定したくありません。私は文字列をたくさん操作する必要があり、それを固定サイズにすると文字列を操作できなくなります。 – egidra

1
void function (const char *input) { 
char *str1 = input; 
char *str2 = "Hello World\0"; 
} 

はCタイプchar *のオブジェクトは、タイプconst char *のオブジェクトで初期化することができません。

あなたが代わりにこれを行う必要があり:すでに終了してNULLである"Hello World"のようなリテラル

また
const char *str1 = input; 

文字列を、ヌル文字を自分で追加する必要がない、代わりにこれを行う:

char *str2 = "Hello World"; 
+0

少なくとも、明示的にキャストすることはできません。 –

+0

@CarlNorum 'char *'を明示的にキャストすると、 'str1'を初期化する' const char * '型の値にはなりません。 – ouah

+0

さて、それはかなり細かく裂ける毛です。まだ関数に渡されたポインタ値で初期化しています。安全であるとは言いませんが、それが最初にエラーが存在する理由です。 –

関連する問題