gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 15:05:36 25 4
gpt4 key购买 nike

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

也就是说,

关于将字符串复制到数组 -- strcpy segfault,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39772354/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com