当我运行以下分段错误时。。。目标是将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];

最佳答案

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类型(否则也需要为其分配存储空间)
allowdip已将类型更改为指针数组
char的签名不太正确-main应该是一个argv数组
将全局变量更改为局部变量char*,因为它们不需要全局变量
main循环更改为遍历所有程序参数。它跳过了你问题的最后一个参数。
完成后释放分配给printf的内存
文森特建议的简化收益率

10-04 21:19