当我运行以下分段错误时。。。目标是将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
的内存文森特建议的简化收益率