文字列を配列にコピーして印刷しようとしています。最初のforループでは動作しますが、2回目にsegフォルトが発生します。あなたがそうでない場合は、全ての反復、あなたが上書きしている(そして最後に、漏れ)メモリ、最初for
ループの外側argumentArray
文字列を配列にコピーする - strcpy segfault
argumentArray = (char**) malloc((argc+1)*sizeof(char*));
のための割り当てを移動する必要があり
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
}
}
[C ' ''でのmalloc() 'と家族の戻り値をキャストさせない理由でこの議論を参照してください。](http://stackoverflow.com/q/605845/2173917)。 –
@ SouravGhosh私はキャストを取り去り、2番目のprintf文は配列に渡された最後の文字列を取ります。 – Felicia