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