簡體   English   中英

嘗試復制陣列C時出現分段錯誤(核心已轉儲)

[英]Segmentation Fault (core dumped) when trying to copy array C

當我運行以下Segmentation Fault ...時,目標是將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);
}

關於我在做什么錯的任何想法嗎?

UPDATE

謝謝,現在我的代碼是:

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循環以遍歷所有程序參數。 它跳過了您問題中的最后一個參數。
  • 完成后,釋放我們分配給allowdip的內存
  • 文森特(Vincent)建議簡化main

您沒有分配內存,並且您的類型都是錯誤的。

計數器應該是整數,而不是指針:

int allowdipcount;

並且該數組應該是一個指針數組,而不是字符數組:

char **allowdip;

然后,您可以分配:

allowdip = malloc(argc * sizeof *allowdip);

並復制數組:

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

請注意,這不會復制實際的參數字符串,只會復制指向字符串的指針數組。 它還在argv[argc]處不包含用於終止數組的NULL指針。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM