我的程序有一個可變數量的參數,我需要用新路徑創建一個execv
,所以我想在不更改的情況下更改其他變量的值argv[1]
它,但它不會讓我。將argv複製到另一個變量以更改它,而不更改原始
char** arg_exec = malloc(argc * sizeof (char*));
int i;
for(i=0;i <= argc-1; i++)
arg_exec[i] = strdup(argv[i]);
arg_exec[argc] = NULL;
if((pid = fork()) == 0){
arg_exec[1] = strcat(directory , dir_info->d_name); //some variables with the current path and a name
execv(arg_exec[0], arg_exec);
printf("Error in process %d\n", getpid());
return 1;
}
但它運行這行後arg_exec[1] = strcat(directory , dir_info->d_name);
它改變了我的argv [1]的價值,我的計劃失敗..
它好工作與execl
,因爲它像execl(argv[0],strcat(directory , dir_info->d_name), ..., NULL);
而是因爲我有一個可變數量的參數來運行它,這不是很好的實現這種方式。
EDIT1:在陣列 EDIT2的末尾添加NULL
:我做一個版本的find
的,所以strcat的會添加到當前目錄下的一個文件夾來看看。 這是目錄中的初始化: char *directory = strcat(argv[1],"/");
背後的想法是什麼:'arg_exec [1] = strcat(directory,dir_info-> d_name);'?那麼'directory'是如何定義和創建的呢? – alk
我正在做一個'find'的版本,所以strcat會在當前目錄中添加一個文件夾來查看 –
引用「* Edit1 *」:你錯過了調整要分配的數組元素的數量。 – alk