[英]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
,因此其他索引的内容仍然不确定。 在后面的循环中,当您尝试使用该值时,它将调用未定义的行为 。
那就是
sizeof(char)
C保证为1。将它乘以没有任何意义。 C
中malloc()
和family的返回值的讨论。 。 可以使用strdup()
代替malloc()
和strcpy()
,如果可以的话。
注意: strdup()
不是标准的C函数FWIW。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.