繁体   English   中英

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

[英]copy a string to an array — strcpy segfault

我正在尝试将字符串复制到数组并打印。 它适用于第一个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
 }

}

您需要移动argumentArray数组的分配

 argumentArray = (char**) malloc((argc+1)*sizeof(char*));

在第一个for循环之外,否则,每次迭代都会覆盖(最后是泄漏)内存。

下面的问题是malloc()返回未初始化的内存,并且对于最后一次迭代,只写入了一个索引argc-1 ,因此其他索引的内容仍然不确定。 在后面的循环中,当您尝试使用该值时,它将调用未定义的行为

那就是

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM