1

関数が変数を使用した直後に、変数を使用して消去しようとしています。基本的に、私はstr1 + str2を実行し、関数で使用してからメモリを解放します。私はすべてがまっすぐになっていると思いましたが、私のコードは警告とエラーをスローします:

  1. エラー:「commande」の再定義。
  2. 警告:関数'malloc'の暗黙の宣言[-Wimplicit-function-declaration]
  3. 警告:組み込み関数'malloc'の互換性のない暗黙の宣言[デフォルトで有効]
  4. 警告:関数'free'の暗黙の宣言[-Wimplicit-function-declaration]
  5. 警告:組み込み関数'free'の互換性のない暗黙の宣言[デフォルトで有効]

前述のコードは次のとおりです。

// Step 1
char* commande = (char*) malloc(len1 + len2 + 1);
strcpy(commande, str1);
strcat(commande, str2);
function(commande);
free(commande);
// Step 2
char* commande = (char*) malloc(len3 + len4 + 1);
strcpy(commande, str3);
strcat(commande, str4);
function(commande);
free(commande);

私は何が間違っているのですか?

編集:len2のタイプミスを修正しました。

4

2 に答える 2

1

次のようなステートメント

char* commande = (char*) malloc(len3 + len4 + 1);

は変数宣言です。それはコンパイラーを言います:私はcommandeを文字へのポインターにしたいです。変数を再宣言しても意味がないため、関数で変数を宣言できるのは1回だけです。

互換性のない暗黙の定義に関するエラーは、コンパイラにタイプが何であるかを伝えなかったという事実に起因しますmalloc。そのためには、必要なすべての宣言を含むヘッダーファイルをインクルードする必要があります。ファイルの上に次の行を配置します。

#include <stdlib.h>
于 2012-12-15T12:23:31.317 に答える
0

インクルードしていることを確認してください。line2の後にポインタコマンドを宣言する必要はありません。

于 2012-12-15T12:24:18.993 に答える