Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将字符串复制到数组--strcpy segfault_C_Arrays_Pointers_Segmentation Fault_Malloc - Fatal编程技术网

将字符串复制到数组--strcpy segfault

将字符串复制到数组--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

我正在尝试将字符串复制到数组并打印它。它适用于第一个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*));
     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
正在写入,因此其他索引的内容仍然不确定。在后面的循环中,当您尝试使用该值时,它将调用

也就是说

  • sizeof(char)
    在C中保证为1。用它乘以任何东西都没有意义
  • 您可以使用
    strdup()
    ,而不是
    malloc()
    strcpy()

    注意:
    strdup()
    不是标准的C函数,FWIW


@SouravGhosh我拿走了演员阵容,第二个printf语句仍然只抓取传递给ArrayTank you的最后一个字符串!我知道是malloc语句导致了错误,但不知道是什么原因。非常感谢。