将字符串复制到数组--strcpy segfault
我正在尝试将字符串复制到数组并打印它。它适用于第一个for循环,但seg第二次出现故障将字符串复制到数组--strcpy segfault,c,arrays,pointers,segmentation-fault,malloc,C,Arrays,Pointers,Segmentation Fault,Malloc,我正在尝试将字符串复制到数组并打印它。它适用于第一个for循环,但seg第二次出现故障 main (int argc, char *argv[]){ int argcIndex; char **argumentArray = NULL; for(argcIndex=0; argcIndex < argc; argcIndex++){ argumentArray = (char**) malloc((argc+1)*sizeof(char*)); argument
main (int argc, char *argv[]){
int argcIndex;
char **argumentArray = NULL;
for(argcIndex=0; argcIndex < argc; argcIndex++){
argumentArray = (char**) malloc((argc+1)*sizeof(char*));
argumentArray[argcIndex] = (char*) malloc(((strlen(argv[argcIndex])+1)*sizeof(char)));
strcpy(argumentArray[argcIndex], argv[argcIndex]); //Works here
printf("argumentArray[%d]: %s \n", argcIndex, argumentArray[argcIndex]); //Works here
}
for(argcIndex=0; argcIndex < argc; argcIndex++){
//strcpy(argumentArray[argcIndex], argv[argcIndex]); //This gives me a segfault
printf("argumentArray[%d]: %s \n", argcIndex, argumentArray[argcIndex]); //This will only grab the last string in array
}
main(int-argc,char*argv[]){
int-argcIndex;
char**argumentArray=NULL;
对于(argcIndex=0;argcIndex
}您需要移动
argumentArray
argumentArray = (char**) malloc((argc+1)*sizeof(char*));
在第一个for
循环之外,否则,每次迭代都会覆盖内存(最终泄漏内存)
下面的问题是,malloc()
返回未初始化的内存,对于上一次迭代,只有一个索引,argc-1
正在写入,因此其他索引的内容仍然不确定。在后面的循环中,当您尝试使用该值时,它将调用
也就是说
在C中保证为1。用它乘以任何东西都没有意义sizeof(char)
- 您可以使用
,而不是strdup()
和malloc()
注意:strcpy()
不是标准的C函数,FWIWstrdup()