0

私のコードフラグメントには次が含まれています(36と37は行番号です):

36     char* colon_unit = extract_colon_unit( zPath, path, &p_index);
37     if (colon_unit == NULL)

コンパイル中に、次の警告が表示されます。

ac:36: 警告: 初期化により、キャストなしで整数からポインタが作成されます

ポインターを外すと、

char colon_unit = extract_colon_unit( zPath, path, &p_index );

それが示している:

ac:37: 警告: ポインタと整数の比較

どうすれば修正できますか?

4

1 に答える 1

2

これは、関数extract_colo_unit()が文字ポインター ( ) ではなく文字 (char) を返すことを意味しますchar*。のデータ型colon_unitを char に変更すると、変数と割り当てられた値の両方が同じ型になるため、最初のエラーは発生しません。

しかし、colon_unitを NULL と比較すると、文字、つまりcolon_unitポインターと比較されます。つまり、NULL は として定義されて(void*)0いるため、37 行目で 2 番目のエラーが発生します。

解決策は、ロジックと、この関数から NULL を返すことの意味に完全に依存します。ただし、エラーの場合や有効な値がない場合は、NULL の代わりに 0 を返し、37 行目で 0 と比較します。

于 2012-05-09T11:53:02.087 に答える