[英]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
的內存 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.