2016-08-13 8 views
1

私は長い間Cを再訪しており、コンパイラによって生成された警告に困惑しています。構造体を操作するときのキャスト警告

struct Unit 
{ 
    char str1[100]; 
    char str2[100]; 
    short expected; 
}; 

int main() 
{ 
    struct Unit arr[] = 
    { 
     {NULL, NULL, 0}, 
     {NULL, "string", -1}, 
     {"string", NULL, 1}, 
     {"string", "string", 0}, 
     {"string1", "string2", -1}, 
     {"string2", "string1", 1}, 
     {"str", "string", -1}, 
     {"string", "str", 1} 
    }; 

    printf("%d\n", arr[0].expected); 
    return 0; 
} 

コンパイルすると、私が手::;

my_strcmp.c: In function ‘main’: 
my_strcmp.c:64:9: warning: initialization makes integer from pointer without a cast [enabled by default] 
     {NULL, NULL, 0}, 
     ^
my_strcmp.c:64:9: warning: (near initialization for ‘arr[0].str1[0]’) [enabled by default] 
my_strcmp.c:64:9: warning: initialization makes integer from pointer without a cast [enabled by default] 
my_strcmp.c:64:9: warning: (near initialization for ‘arr[0].str1[1]’) [enabled by default] 
my_strcmp.c:65:9: warning: initialization makes integer from pointer without a cast [enabled by default] 
     {NULL, "string", -1}, 
     ^
my_strcmp.c:65:9: warning: (near initialization for ‘arr[1].str1[0]’) [enabled by default] 
my_strcmp.c:65:9: warning: initialization makes integer from pointer without a cast [enabled by default] 
my_strcmp.c:65:9: warning: (near initialization for ‘arr[1].str1[1]’) [enabled by default] 
my_strcmp.c:66:9: warning: initialization makes integer from pointer without a cast [enabled by default] 
     {"string", NULL, 1}, 
     ^
my_strcmp.c:66:9: warning: (near initialization for ‘arr[2].str2[0]’) [enabled by default] 

私はそれを得ることはありませんここでは、関連するコードですポインタから整数を作るのはどこですか?助けてください。

+2

ヘッダファイル??? –

+0

@SouravGhosh男、ちょうど彼らがそこにいると仮定してください!私はコード全体を投稿しませんでした。 – dotslash

+2

配列をNULLで初期化することは意味をなさない。 NULLを ""に変更してください –

答えて

4

私は、線番号64,65、および66は、NULLを使用して構造体を初期化するものと仮定しています。 NULLはポインタであり、ポインタを使って配列を初期化することはできないため、これは機能しません。

私が見ることができる唯一の解決策は、構造体の文字列配列をポインタにするか、空の文字列""に "未使用"文字列を初期化することです。

+0

すべての権利、ありがとう!私は 'NULL'が自動的に配列の内部ポインタ表現に自動的に代入されると思いました。あまりにも多くのPython、私は思います。 ;-) – dotslash

+2

@dotslash配列は自然に*ポインタから崩壊しますが、ポインタ自体ではありません。 –

+0

"Decays"?あなたは「変換された」という意味ですか、あるいは物事の崩壊という実際のアナログがありますか? – dotslash

関連する問題