1

良い時間です!

このコードをUbuntuでg++4.7.2で正常にコンパイルしましたが、WindowsでMingwを使用してコンパイルする際に問題が発生します。

簡略化されたコード:

 size_t string_length=some_size;
 char arr_symb[string_length+1];

 char *outputde=arr_symb;
 iconv_t type=iconv_open("UTF-8","WINDOWS-1251");

char output[some_size];

char *p1=arr_symb;
char *p2=output;

if (   iconv(type, &p1,&string_length, &p2, &output_length ) == -1 )// here 
        // is mistake, it doesn't like pointers p1 and p2 but I wonder why

  log_info("something went wrong");

Linux with G ++では、コンパイルでき、正常に動作します。Mingwでエラーが発生します:

ここに画像の説明を入力してください

それがg++でうまく機能するのなら、なぜmingwはそれを間違っているように扱うのだろうか?

前もって感謝します!

追加
私のMingwバージョンは4.4.0です
GCCバージョンは4.7.2です

4

2 に答える 2

1

ご清聴ありがとうございました。問題は解決しましたが、私には不思議です(まだ不明です)

関数にはそのようなプロトタイプがありますが、

ここに画像の説明を入力してください

MinGWでは、次のように呼び出す必要があります。

ここに画像の説明を入力してください

したがって、問題は、MinGWの入力文字列を定数として渡す必要があることです(このようなプロトタイプもありません)。

于 2013-01-04T00:03:19.667 に答える
1

これらの宣言を参照してください。

  int  a[10];
  int* b = malloc(10 * sizeof(int));

見た目も感じも同じですが、次のようになります。

intの配列(* b)へのポインターは、intの配列(a)と同じではありません!したがって、配列へのポインタ(*)もポインタ(**)へのポインタと同じではありません!

ポインターの間接参照には、もう1つのレベルが必要です。

于 2021-05-18T13:09:01.057 に答える