0

次のセグメンテーション違反を実行すると... 目標は、argv 配列を allowdip 配列にコピーすることです。

char *allowdip;
int *allowdipcount;


int main(int argc, char *argv)
{
  int xer;

  allowdipcount = argc;

  for(xer=0; xer<allowdipcount; xer++) {
    allowdip[xer]=argv[xer];
  }

  for(xir=0; xir<allowdipcount -1; xir++) {
    printf("%s\n", allowdip[xir]);
  }


exit(EXIT_SUCCESS);
}

私が間違っていることについてのアイデアはありますか?

アップデート

ありがとう、今私のコードは次のとおりです。

char **allowdip;
int allowdipcount;

int main(int argc, char *argv)
{
  int xer;
  int xir;

  allowdipcount = argc;
  char **allowdip = malloc(allowdipcount * sizeof(char*));
  for(xer=0; xer<argc; xer++) {
      allowdip[xer]=argv[xer];
  }

    for(xir=1; xir<allowdipcount; xir++)
    printf("%s\n", allowdip[xir]);
    exit(EXIT_SUCCESS);

}

それは返します:

 testscript2.c:51: warning: assignment makes pointer from integer without a cast

行 51 には以下が含まれます。

 allowdip[xer]=argv[xer];
4

2 に答える 2

4

allowdip初期化されていないポインタです。そのためにメモリを割り当てる必要があります

#include <stdlib.h>
#include <stdio.h>

int main(int argc, char *argv[])
{
  int xer;
  int allowdipcount = argc;
  char **allowdip = malloc(allowdipcount * sizeof(char*));

  for(xer=0; xer<allowdipcount; xer++) {
      allowdip[xer]=argv[xer];
  }

  for(xer=0; xer<allowdipcount; xer++) {
    printf("%s\n", allowdip[xer]);
  }
  free(allowdip);
  return EXIT_SUCCESS;
}

コードにいくつかの変更を加えたことに注意してください

  • allowdipcountタイプであるint必要があります(そうでない場合は、ストレージも割り当てる必要があります)
  • allowdipcharタイプがポインターの配列に変更されました
  • の署名がmain正しくありませんでした -配列argvでなければなりませんchar*
  • mainグローバル変数をローカルにする必要がなかったので、グローバル変数をローカルに変更しました
  • printfすべてのプログラム引数を繰り返すようにループを変更しました。質問の最後の引数をスキップしていました。
  • allowdip使い終わったら、割り当てたメモリを解放します
  • mainヴィンセントが提案した簡素化されたリターン
于 2013-04-23T14:52:23.330 に答える
1

メモリを割り当てておらず、型がすべて間違っています。

カウンターは、ポインターではなく整数である必要があります。

int allowdipcount;

配列は、文字ではなくポインターの配列である必要があります。

char **allowdip;

次に、次を割り当てることができます。

allowdip = malloc(argc * sizeof *allowdip);

配列をコピーします。

memcpy(allowdip, argv, argc * sizeof *allowdip);

これは実際の引数文字列をコピーするのではなく、文字列へのポインターの配列のみをコピーすることに注意してください。また、配列を終了するNULLポインタも含まれません。argv[argc]

于 2013-04-23T14:57:01.427 に答える